1、MYSQL数据的备份方式有哪些?
答:备份方式有:物理备份、逻辑备份、冷热备份;
物理备份:通过系统自带命令进行复制cp或tar打包压缩的方式备份,也叫冷备份;
逻辑备份:通过mysql自带服务或者额外安装软件进行备份;
mysqldump 和 mysql
冷热备份:在备份的过程中别人无法访问的叫冷备份,备份过程中也能访问的叫热备份;
2、备份策略有哪些?
答:备份策略有:完全备份、增量备份、差异备份;
完全备份:备份所有数据;
增量备份:备份上次备份后,所有新产生的数据;
如:周一备份之后,周二产生了新数据,再次备都份时只需要备份新增的周二的数据即可;
以上一次备份作为新数据备份的参考点,备份时间短,节约内存;
差异备份:备份完全备份后,所有新产生的数据;
如:差异备份时,主要以完全备份作为参考点,每次备份都拿新数据与完全备份时的数据对比;
周一完全备份,周二新增数据进行备份,差异备份会把周二的数据与周一完全备份的数据全部备份 一遍,周三,周四依然如此;
以完全备份为参考点,备份所需时间长,耗内存,安全;
各种备份方式的操作流程与优缺点:
1、物理备份的具体操作流程与优缺点;
第一步、新建一个目录,将mysql的所有数据拷贝到新建的目录中;
也可以用tar命令;
mkdir /mysql.backups ; cp -r /var/lib/mysql /mysql.backups
第二步、scp 远程拷贝给所需要的主机;
scp -r /mysql.backups root@客户IP地址:/目录
第三步、客户机验证目录是否拷贝成功;
ls 查看scp拷贝过来的目录;
第四步、清空/var/lib/mysql/目录下的其他文件,将备份文件拷贝到这个目录下并授权;
rm -rf /var/lib/mysql/
cp -r /备份目录/* /var/lib/mysql/
因为,是用root拷贝的,所以目录中所有的文件都属于root用户,mysql用户无权读取;
所以,要将这个目录的所有者和所属组变更为mysql;
chown -R mysql:mysql /var/lib/mysql/
第五步、重起mysql服务,验证备份结果;
systemctl restart mysql
mysql -u toot -p密码
优点:简单便捷
缺点:随着时间的积累数据越越来越大,备份起来费时费力,并且存在文件格式与系统不兼容的问题;
所以,物理备份只适合数据量小,系统统一时使用;
2、逻辑备份的具体操作流程与优缺点;
逻辑备份之完全备份与恢复——mysqldump
备份命令格式:】# mysqldump -uroot -p密码 库名 > 路径/xxx.sql
恢复命令格式:】# mysql -uroot -p密码 库名 < 路径/xxx.sql
备份所有数据、备份数据库、备份表的具体操作:
* mysqldump -uroot -p密码 all (或-databases、或-A) > 路径/xxx.sql
* 如何备份数据库所有数据?
* 如何备份数据库中的单个库?
* mysqldump -uroot -p密码 库名 > 路径/xxx.sql
* 如何同时备份数据库中的多个库?
* mysqldump -uroot -p密码 -B 库名1 库名2 库n... > 路径/xxx.sql
* 如何备份数据库中的表?
* mysqldump -uroot -p密码 库名 表名1 表名2 > 路径/xxx.sql
恢复所有数据、备份数据库、备份表的具体操作:
* 如何恢复所有数据?
* mysql -uroot -p密码 < 路径/xxx.sq ( 恢复所有数据可以不需要加库名)
* 如何恢复单个书库的数据?
* mysql -uroot -p密码 库名 < 路径/xxx.sq
* 如何恢复多个数据库的数据?
* mysql -uroot -p密码 < 路径/xxx.sq ( 恢复多个数据库的数据也不需要加库名)
* 如何恢复数据库中表的数据?
* mysql -uroot -p密码 库名 < 路径/xxx.sq
注意事项:
1. mysqldump备份数据,本质上备份的是你在数据库中书写的命令;
2. 在恢复表数据时需要查看装表的库是存在,如果不存在需要先创建在恢复;
3. 在恢复多个数据库和所有库的时候,可以不需要加库名;
4. 无论是恢复数据还是备份数据都要验证用户权限;
mysqldump完全备份的优缺点:
优点:1.mysqldump备份数据,本质上备份的是你在数据库中书写的命令,所以备份的通用性非常好,mysql命令通用;
2.方便快捷,
缺点:1.备份时会把数据库锁住导致备份期间无法写入和读取数据,影响客户体验;
2.不能时时备份,当备份完之后,随即写入的数据没有备份,如果删除无法恢复,只能恢复之前的备份;
3、时时备份的具体操作流程与优缺点;
1、时时备份的工作原理:
第一、时时备份采取的时运用二进制的方式备份你在数据库中所操作的所有除查看命令外的,会让数据库变动的命令;
比如:insert into 、 drop 、 update 、 delete 等等
select 、 show 、 desc 查看命令不备份;
第二、每次产生一个新的二进制日志文件,系统都会自动生成一个索引文件,用于记录日志已有的文件名;
第三、需要在/etc/my.cnf文件中的 [ mysql ] 字符下面添加:
log_bin[=dir/name]
## [=dir/name]译为指定日志文件存放的目录位置,不设定的情况默认存放在/var/lib/mysql/;
server_id=数字
##译为服务器id,0-255随便填写一个数字即可;
max_binlog_size=数字M
##译为日志文件的内存大小为多少M,默认1G,不设定的情况下为默认值;
2、如何手动添加日志文件?
第一、重新启动mysql服务,生产环境下禁用,因为在启动过程中可能会有客户访问;
第二、在mysql环境中执行刷新命令: mysql > flush logs;
第三、运用mysqldump备份数据时添加--flush-logs选项;
mysqldump -uroot -p密码 --flush-logs 库名 > 路径/xxx.sql
第四、linux系统命令行中添加-e选项;
mysql -uroot -p密码 -e "flush logs"
这个方法可以不用进入数据库,在系统命令行可以查看到mysql数据库中的内容;
3、如何删除无用的日志文件?
第一、删除早于指定版本之前的binlog日志;
命令格式:purge master logs to "binlog文件名";
第二、删除所有binlog日志,重建新日志;
命令格式:reset master ;
注:删除日志文件的同时,索引文件也会自动删除,并同步日志文件;
在linux命令行用mysql的指令:
mysql -uroot -p密码 -e "mysql的指令"
在mysql命令行用linux的指令:
system linux的指令
4、如何自定义mysql数据库中的binlog日志文件名和目录?
第一、不能把目录创建在/root目录下,因为/root目录是管理员root的家目录,所有者是root,如果把权限赋予给其他用户,会非常危险,所以不能把目录创建在/root目录下;
第二、在根目录下创建一个目录,并归属与mysql用户;
mkdir /mylog ; chown mysql:mysql /mylog
第三、修改mysql的配置文件/etc/my.conf;
vim /etc/my.conf
[mysql]
server_id=50 ##1-255之间的数字均可;
log_bin=/mylog/bac ##目录均可自定义
第四、验证目录是否修改成功;
a、在linux命令行查看日志文件是否有生成;
b、在mysql命令行查看: show master status;
5、如何运用binlog日志文件恢复所有的数据?
日志文件恢复数据的原理是:通过记录保存mysql执行过的命令,然后再通过mysqlbinlog命令执行一遍;
第一、将binlog日志文件拷贝到需要数据恢复的主机;
第二、运用 mysqbinlog 命令恢复数据;
mysqlbinlog 日志文件路径 | mysql -uroot -p密码
第三步、验证数据是否有恢复;
show databases; select * from 库名.表名;
注意事项:
6、如何修改日志格式?
第一、查看当前日志格式,"binlog_format"日志变量;
mysql > show variables like "binlog_format";
第二、必须要了解日志的三种格式;
A、statement 这种格式每一条修改数据的SQL命令都会记录再binlog日志中;
B、row 不记录SQL语句上下文相关信息仅保存哪条记录备修改;
C、mixed 以上两种格式的混合使用;
第三、修改日志的具体步骤;
在 /etc/my.cnf 配置文件 [mysql] 字符下添加 binlog_format="日志格式" 即可;
然后,重新启动mysql,并用 mysqlbinlog 日志路径文件 | grep -i mysql命令;
例如: mysql > mysqlbinlog /mylog/bac.000001 | grep insert
7、如何运用binlog日志恢复指定的部分日志?
第一、要明白什么是“偏移量”的概念?
偏移量——指的就是字符A到字符B的距离
在mysql命令行输入的每一条改变数据库和表格的数据,偏移量都会改变——Position下的数字会变化;
偏移量可以用于恢复指定的数据;
第二、恢复指定部分数据的命令格式:
mysqlbinlog 日志文件路径 ##先查看出偏移量的起始与结束位置,时间也是用mysqlbinlog命令查询;
]# mysqlbinlog --start-position=偏移量 --stop-position=偏移量 日志文件路径 | mysql -uroot -p密码
]# mysqlbinlog --start-datetime="yyyy-mm-dd hh:mm:ss" --stop-datetime="yyyy-mm-dd hh:mm:ss"
日志文件路径 | mysql -uroot -p密码
注:在生产环境中通常是drop删除在最后,所以可以快速定位偏移量;
以上.......
<END>
祝:开心!
罗贵
2019-05-17于深圳