MySQL 基于mysqldump备份工具实战演练

前言: 细节提示:先执行 show global variables like 'log _ bin';看看 log_bin 的值,如果服务器变量log _bin的值为OFF,需要修改my.cnf配置文件,将log _bin=mysql-bin,再重启MariaDB


mysqldump: 客户端SQL导出工具,通过mysql协议连接至mysqld服务器

(1)使用格式:

mysqldump [选项] > backup.sql

(2)选项说明

-A: 备份所有的数据库

-B 数据库1, 数据库2, 数据库3:指定需要备份的数据库

MyISAM, InnoDB: 温备

    -x 或 --lock-all-tables:锁定所有表

    -l 或 --lock-tables:锁定备份数据库中的表


InnoDB:热备

    --single-transaction:启动一个大的单一事务实现备份

    -B 或 --databases 数据库1,数据库2:备份指定的数据库

    -C 或 --compress:压缩传输

注意:二进制文件不应该与数据文件放在同一个磁盘上

前言:由于mysqldump只能实现数据库中指定数据库或数据表的完全备份,无法实现对表的单行或多行的增量备份,那么对应增量备份,将使用二进制文件进行备份

第一步:

  使用mysqldump做完全备份,其中使用 --master-data=2 选项会在hellodb.sql中增加一条注释说明完全备份的结束位置,并且会显示完全备份结束后,滚到到了那个日志文件

mysqldump -uroot -h192.168.23.11 -p123456 -B uplooking --lock-tables --flush-logs  > uplooking.sql

第二步:

  对完全备份之后的时间点到当前时间点做增量备份,在需要备份的服务器上操作,其中8631是完全备份后的时间点,因此,将从这个点开始到最后的日志文件的SQL语句都备份出来

mysql-bin.000005 该文件需配置/etc/my.cnf 中的[mysql]下添加log-bin=mysql-bin    server-id=1
并开启二进制文件set sql_log _bin = ON,之后可以在/var/lib/mysql/看到该文件,我这边是编译安装的,所以路径有偏差

mysqlbinlog  /data/mysql/mysql-bin.000005 > increment.sql

(对于之后的每次增量做备份,可以无需指定开始时间,我们可以在增量备份之前将,二进制日志滚动,那么每次增量的时候,登入mysql使用 flush logs 命令,滚动日志,那么如果再有日志产生,将会写在下一个日志文件里,那么对于上一次增量备份到此时,可以直接使用客户端命令 mysqlbinlog /data/mysql/mysql-bin.000005 > increment.sql , 再将备份文件拷贝到备份的数据库中就可以了)

第三步:

set sql _log _bin = OFF; # 关闭二进制文件
 
show variables like 'sql_log_bin'; # 查看状态

第四步:

  将hellodb.sql和increment.sql文件都拷贝到对应的数据恢复的主机上,将备份的SQL文件进行导入(关闭备份数据库服务器的二进制日志功能)

mysql -p123456 < hellodb.sql
 
mysql -p123456 < increment.sql

第五步:

  当关闭二进制文件之后再导入文件系统上保存的SQL文件,但是SQL文件不要放在/root目录下面,因为/root目录对其它用户的权限是0,而mysqld进程的属主和属组都是mysql,因此无法进入/root目录里面,去读取SQL文件,切记导入了SQL文件之后,在开启二进制文件

set sql_log_bin = ON; # 开启二进制文件
 
show variables like 'sql_log_bin'; # 查看状态

注意:SQL文件进行导入的时候不能一个同样的SQL进行重复导入,如果是插入语句,就会一直插入值

posted @ 2019-09-07 22:50  ~小学生~  阅读(277)  评论(0编辑  收藏  举报