## 数据库备份
>[success]在这里咱们只介绍一下单数据库的备分
### 数据库备份的方法
------------------------------数据库备份:------------------------------------
使用命令:mysqldump 格式为:
~~~
#备份指定数据库
mysqldump -u[用户名] -p[密码] 数据库 >备份文件.sql
#备份压缩
mysqldump -u[用户名] -p[密码] 数据库 |gzip>备份文件.sql
~~~
但是在使用过程中会提示:
~~~
Warning: Using apassword on the command line interface can be insecure.
~~~
意思是说:在命令行中输入密码 不安全
在命令行输入密码,就会提示这些安全警告信息;
【解决办法】
把账号密码写入配置文件即可
`vim /etc/my.cnf`
~~~
[mysqldump]
user=your_backup_user_name
password=your_backup_password
~~~
修改完配置文件后, 只需要执行mysqldump 脚本就可以了;备份脚本中不需要涉及用户名密码相关信息;
~~~
mysqldump ys_yangsheng > test1.sql
~~~
在备份时,可以对文件进行压缩
### 数据库备份脚本的案例:
~~~
#!/bin/bash
#mySQL数据库备份
#author yifeng (Email:576617109@qq.com)
ntpdate asia.pool.ntp.org &>/dev/null #同步系统时间
date=$(date +%Y%m%d%H%M%S)
month=$(date +%Y%m)
mkdir /mnt/beifen/zhixiao &>/dev/null
mkdir /mnt/beifen/zhixiao/mysql &>/dev/null
if [ -d /mnt/beifen/backup ]
then
cd /mnt/beifen/backup
mysqldump ys_yangsheng >zhixiao.sql
else
mkdir /mnt/beifen/backup
cd /mnt/beifen/backup
mysqldump ys_yangsheng >zhixiao.sql
fi
cd /mnt/beifen/zhixiao/mysql
if [ -d $month ]
then
cd $month
tar -zcf mysql_$date.tar.gz /mnt/beifen/backup/zhixiao.sql &>/dev/null
else
mkdir $month
cd $month
tar -zcf mysql_$date.tar.gz /mnt/beifen/backup/zhixiao.sql &>/dev/null
fi
rm -f /mnt/beifen/backup/zhixiao.sql
cd / #返回根目录,不然下次执行时可能会报错,一般是当前目录被删除的情况下
~~~
#### [写脚本的注意事项:]
>[danger]1、if 语句中 的中括号的两边要有空格
2、带有变量的语句,特别是目录,最好是分开来写
3、执行脚本时,当在所在目录要存在
例:如当前目录 /test/test1
在脚本中,有一句是删除test1
那么这时执行脚本可能就会报错。
#### [遇到的问题]
~~~
#同步系统时间
ntpdate asia.pool.ntp.org
~~~
>[success]在执行下面一条命令同步系统时间时,出现如下提示:

>[danger]原因:是因为咱们设置的有防火墙,并且只开了,22、80 端口。
在这里咱们需要开启53端口和123端口。
53端口介绍
服务:Domain Name Server(DNS)
说明:DNS服务器所开放的端口,入侵者可能是试图进行区域传递(TCP),欺骗DNS(UDP)或隐藏其他的通信。因此防火墙常常过滤或记录此端口。
#### 所以在这里临时开启一下53端口即可。
~~~
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 53 -j ACCEPT
iptables -A INPUT -p tcp --sport 53 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -p UDP --dport 53 -j ACCEPT
iptables -A OUTPUT -p UDP --sport 53 -j ACCEPT
iptables -A INPUT -p UDP --sport 53 -j ACCEPT
iptables -A OUTPUT -p UDP --dport 53 -j ACCEPT
~~~
#### 所以在这里临时开启一下123端口即可。
~~~
iptables -A INPUT -p UDP --dport 123 -j ACCEPT
iptables -A OUTPUT -p UDP --sport 123 -j ACCEPT
~~~
#### 通过上面的设置之后,再次执行:
~~~
ntpdate asia.pool.ntp.org
~~~

### 知识扩展-备份所有数据库
在这里主要介绍一下,备份的思路!
### 备份要求
#### 1. 备份所有数据库
#### 2. 备份后需要压缩成tar.gz的格式
#### 3. 备份的名称需要和数据库同名
#### 4. 同一次备份放在以时间串命名的目录中
### 知识点分析
#### 难点1. 数据库名的获取
>[info]如何获取所有的数据库名称
要想获取全部的数据库名称可以使用,show databases,前提需要先登录数据库。
在脚本同的实现方式:
~~~
#! /bin/bash
da=`/usr/local/mysql/bin/mysql -uroot -p111111 <<EOF
show databases;
EOF`
#输出结果
Database
information_schema
mysql
performance_schema
sys
~~~
#### 难点2.循环备份数据库
>[success]在这里要注意,第一个Dababase这个是不需要备份的,可以在循环前将其去除,也可以备份时做一次判断跳过备份。
用到的循环语句
~~~
for dataname in $da #dataname 前不能加$
do
#执行备份,数据库名为$dataname
done
~~~
#### 最终的脚本
在这里咱们直接备份mysql自带的数据库
~~~
#!/bin/bash
# 获取数据库列表
datalist=`/usr/local/mysql/bin/mysql -uroot -p111111<<EOF
show databases;
EOF`
#创建当前备份目录
dirname=$(date +%Y%m%d%H%M%S)
mkdir /backup/$dirname
for dataname in $datalist
do
if [ $dataname != 'Database' ]
then
#备份文件放到/backup
/usr/local/mysql/bin/mysqldump $dataname --single-transaction>/tmp/$dataname.sql
cd /tmp
tar -czf /backup/$dirname/$dataname.tar.gz ./$dataname.sql>/dev/null
rm -f /tmp/$dataname.sql
fi
done
cd /
~~~
### 遇到的问题
在这所说的备份都是mysqldump
执行上面的脚本备份数据库时如下错误:

>[danger]出现这个问题的原因,是因为咱们获取到的数据库表中,第一个Database这个并不是一个真正的数据库,而是咱们通过show databases;时,出现的个数名称。这个数据库实际是不存在的,所以对其进行备份会出错。
但是在脚本中,咱们已经执行了如下命令,将其排除,目前的报错,说明脚本中并没有排除成功。排除的代码如下:
~~~
#排除Database,这个无效数据库
if [ $dataname!='Database' ]
then
#备份文件放到/backup
/usr/local/mysql/bin/mysqldump $dataname --single-transaction>/tmp/$dataname.sql
cd /tmp
tar -czf /backup/$dirname/$dataname.tar.gz ./$dataname.sql>/dev/null
rm -f /tmp/$dataname.sql
fi
~~~
>[success]只所以没有排除成功,是因为if [ $dataname!='Database' ]。在这里大家一定要注意:
if语句的使用注意事项:
#### 空格不能少
`if 空格[空格$dataname空格!=空格'Database'空格] 这里面的空格是不能少的。`
#### 命令不能少
~~~
if command
then
command #不能少
else
command
fi
~~~
### 2. tar: 从成员名中删除开头的“/”
>[info]出一这个问题,是因为在使用在tar命令时,要打包的文件需要是相对路径,如果是绝对路径就出报这个提示,但是是可以正常打包成功的。
解决办法有两个:
#### 1. 加入 -P 参数
#### 2. 使用相对路径(推荐)
#### 3. 在执行数据库备份时可能会出现如下问题:
`/usr/local/mysql/bin/mysqldump $dataname >/tmp/$d ataname.sql`
执行以上数据库备份命令会报如下错误:

解决办法:加入参数--single-transaction
~~~
/usr/local/mysql/bin/mysqldump $dataname --single-transaction>/tmp/$d ataname.sql
~~~
### 4. 备份时出现如下错误:

出在这个问题的原因:
>[danger]从mysql5.7.6开始information_schema.global_status已经开始被舍弃,为了兼容性,此时需要打开 show_compatibility_56
把show_compatibility_56打开:
~~~
mysql> set global show_compatibility_56=on;
Query OK, 0 rows affected (0.00 sec)
~~~
- 前言准备
- Linux新服务器的前期配置
- 认识linux下的Web服务器
- Linux的基本配置
- LNMP一键安装包快速部署web服务器
- LAMP服务器环境部署
- LAMP服务器管理
- LNMP服务器环境部署
- LNMP服务器管理
- lnmp一键安装包-常见问题
- 使用包管理器快速部署环境
- 包管理器快速部署LAMP服务器环境
- 升级php和mysql版本
- 包管理器快速部署LNMP服务器环境
- 使用源码包部署Linux服务器web环境
- 编译LAMP服务器环境部署
- apache安装与配置
- mysql的安装与配置
- PHP的安装与配置
- 编译LNMP服务器环境部署
- nginx服务启动脚本
- 源码安装常见问题
- Centos6与Centos7的区别
- 默认控制系统服务工具不同
- 设置开机启动的方式不同
- 编写service启动脚本
- 编写systemctl启动脚本
- 服务器安全
- 隐藏服务器信息
- Linux服务器防火墙设置
- 防火墙设置脚本
- 邮件发送
- 任务脚本的编写
- 服务器磁盘和服务器健康状态脚本
- 服务器登录报警脚本
- 数据库备份脚本
- 定时任务及应用
- 常见问题
- linux中使用ping命令不同的问题
- Linux中无法发送邮件
- mailx通过ssl方式发送邮件
- Mysql配置文件
- Linux TCP/UDP 常用端口
- Linux常见命令
- 系统信息
- 关机 (系统的关机、重启以及登出 )
- 文件和目录
- 文件搜索
- 挂载一个文件系统
- 磁盘空间
- 用户和群组
- 文件的权限
- 文件的特殊属性
- 打包和压缩文件
- RPM包
- YUM软件包升级器
- DEB 包 (Debian, Ubuntu 以及类似系统)
- APT 软件工具 (Debian, Ubuntu 以及类似系统)
- 查看文件内容
- 文本处理
- 字符设置和文件格式转换
- 文件系统分析
- 初始化一个文件系统
- SWAP文件系统
- 备份
- 光盘
- 网络-(以太网和WIFI无线)
- vi命令
- cut命令 截取
- Mysql
- MySQL备份-增量备与恢复命令实战
- mysqlbinlog
- mysql的安装
- 卸载mysql
- mysql多实例安装
- mysql 常用基础命令操作
- linux安装jdk、rpm安装mysql
- linux制作本地yum源
- shell脚本
