上文中已经提到mysqldump命令工具基本的数据库和数据表的备份方式,除了以上说明的参数用法,还有其他备份参数信息;
同样可以实现进阶方式的数据库信息备份保存:
一、数据库数据备份进阶方式一:利用命令参数 --single-transaction¶
这个参数的用法作用可以利用一个形象的例子去理解:比如在某个时刻班主任希望统计班级同学的数量情况,那么该如何统计准确呢?
方法一:
形象说明:锁门封闭统计,禁止人员在教室内外随意走动,取班级人数变化的静止状态的学生数量;
真实应用:锁表封闭备份,禁止数据库程序进行数据更新操作,实现静止锁表状态进行数据备份;(一般选择半夜操作)
方法二:
形象说明:瞬时拍照统计,允许人员在教室内外随意走动,但是会根据拍照时刻人员数量进行统计;
真实应用:瞬时节点备份,允许数据库程序进行数据更新操作,只把备份操作瞬间已有数据备份;
因此,利用--single-transaction参数进行数据备份,就等价于在备份的时候给数据库的数据拍了照,备份时候数据库可以继续更新;
命令参数官方信息详细解读:
- 对于InnoDB存储引擎的表,将会利用MVCC中的一致性快照进行备份;
- 在备份数据期间不要出现DDL操作语句信息,如果出现DDL操作语句,将会导致备份数据不一致;
--single-transaction参数官方说明:
Creates a consistent snapshot by dumping all tables in a single transaction.
通过在单个事务中备份所有表时,会创建一致性快照
Works ONLY for tables stored in storage engines which support multiversioning (currently only InnoDB does);
仅适用于存储在支持多版本控制的存储引擎中的表(目前只有InnoDB)
对于InnoDB,会利用MVCC中一致性快照进行备份;
the dump is NOT guaranteed to be consistent for other storage engines.
这种方式的备份不能保证与其他存储引擎一致
While a --single-transaction dump is in process, to ensure a valid dump file
当--single-transaction参数应用在备份进程中时,确保备份文件的有效性
(correct table contents and binary log position),
含有正确的表内容和binlog日志位置点
no other connection should use the following statements: ALTER TABLE, DROP TABLE, RENAME TABLE, TRUNCATE TABLE, as consistent snapshot is not isolated from them.
在进行备份数据期间,不要出现相关DDL的操作信息,导致备份数据不一致;
Option automatically turns off --lock-tables.
示例说明:
# 进行数据库单库备份操作
[root@db01-51 ~]# mysqldump -uroot -p123456 -B zq --single-transaction --set-gtid-purged=OFF >/database_backup/zq.sql
二、数据库数据备份进阶方式二:利用命令参数 --master-data=2(2为常用)¶
数据备份痛点:在进行数据库全备+binlog恢复数据时,如何进行binlog的临界点(起点)截取操作?
在备份数据的时候会记录binlog日志位置点到备份文件中,这个位置点是上一次全备之后新增数据的临界点;
在未来数据库服务出现异常时,会先恢复全备的数据信息,然后恢复binlog日志临界点之后的数据信息;
在指定日志位置点进行备份的时候,生成的操作日志语句如下:
CHANGE MASTER TO MASTER_LOG_FILE='binlog.000011', MASTER_LOG_POS=2335;
-- binlog.000011 表示临界点之后的文件信息
-- 2335表示全备进行时的位置点信息 binlog.000001 binlog.000002 binlog00003
命令参数官方信息详细解读:
- 利用此参数功能,可以实现自动记录位置点信息;
- 利用此参数功能,可以实现自动添加全局读锁(GRL)功能(在配合--single-transaction参数使用时,可以减少锁时间);
--master-data[=#]参数作用:
在备份期间,会将备份后的binlog位置点信息存储到备份文件中
--master-data[=#]参数官方说明:
This option is deprecated and will be removed in a future version. Use source-data instead.
此选项已弃用,将在以后数据库服务的版本中删除,请使用source-data代替此参数使用;
--source-data[=#]
This causes the binary log position and filename to be appended to the output.
这个参数会导致binlog日志位置点信息和文件名信息会附加到输出中,即附件到备份文件中。
If equal to 1, will print it as a CHANGE MASTER command;
如果数值等于1,将输出显示change master的命令信息;
if equal to 2, that command will be prefixed with a comment symbol.
如果数值等于2,该命令将以注释符号作为前缀
This option will turn --lock-all-tables on, unless --single-transaction is specified too
这个参数在使用时,将会自动开启--lock-all-tables参数功能,除非也指定了--single-transaction参数信息;
(in which case a global read lock is only taken a short time at the beginning of the dump;
在这种情况下,全局读锁只在备份开始时占用很短的时间
do not forget to read about --single-transaction below).
不要忘记阅读一下--single-transaction参数功能说明
In all cases, any action on logs will happen at the exact moment of the dump.
在所有情况下,日志上的任何操作都将在备份的确切时刻发生
Option automatically turns --lock-tables off.
参数将自动关闭 --lock-tables参数功能
备份数据进阶方式实践:
# 进阶方式数据备份(不压缩备份)
[root@master ~]# mysqldump -uroot -p123456 --master-data=2 --single-transaction -A -B >/tmp/bak.sql
-- -B 表示在备份时添加use语句信息
# 进阶方式数据备份(压缩备份)
[root@master ~]# mysqldump -uroot -p123456 --master-data=2 --single-transaction -A -B|gzip >/tmp/bak.sql.gz
-- 压缩数据解压命令
[root@master ~]# gzip -d /tmp/bak.sql.gz
三、数据库数据备份进阶方式三:利用命令参数 -R -E --triggers¶
模拟时间-某周周二晚零点,企业数据库管理员进行一次数据库服务数据全备操作
[root@master ~]# mysqldump -uroot -poldboy123 -B mdb --master-data=2 --single-transaction -R -E --triggers >/databases_backup/oldboy_`date +%F`.sql
以上mysqldump备份中的特殊参数说明:
| 序号 | 参数信息 | 官方说明 | 解释说明 | 参考链接 |
|---|---|---|---|---|
| 01 | -R | Dump stored routines (functions and procedures) | 表示进行数据库存储过程备份 | https://www.runoob.com/w3cnote/mysql-stored-procedure.html |
| 02 | -E | Dump events | 表示进行数据库事件信息备份 | https://blog.csdn.net/JokerLJG/article/details/128701993 |
| 03 | --triggers | Dump triggers for each dumped table. | 表示进行触发器信息备份 | https://blog.51cto.com/u_15061951/4326095 |
-R参数涉及名词解释说明:
- 存储过程:等价于数据库中的脚本信息,脚本可以完成一系列数据库的逻辑操作,相应前端程序代码文件进行调用即可
-E参数涉及名词解释说明:
- 事件信息:可以设置数据库的计划任务,根据事件信息对数据库中的数据进行相应操作
--triggers参数涉及名词解释说明:
- 特殊的存储过程,是根据特定的事件信息,自动触发或执行的存储过程
四、数据库数据备份进阶方式四:利用命令参数 --max_allowed_packet=64M¶
此参数表示允许进行传输的数据包大小,在某些时候如果备份的数据为大表数据,需要调整此参数信息;
如果没有正确的设置此参数信息,可能会导致备份大表数据时,会出现数据备份失败的情况;
结合以上参数信息,进行标准化数据备份操作:
# 数据库数据信息备份过程(全备)
[root@master ~]# mysqldump -uroot -p123456 -A --master-data=2 --single-transaction -R -E --triggers --max_allowed_packet=64M >/database_backup/full_`date +%F`
[root@master ~]# ll /database_backup/
-rw-r--r-- 1 root root 51254551 11月 26 00:47 full_2022-11-26
# 数据库数据备份信息查看
[root@master ~]# vim /database_backup/full_2022-11-26.sql
-- 表示在进行数据恢复操作时,会将gtid1-6的事件信息删除掉,因为在之前备份数据中已经有了1-6的事件数据信息;
-- 因此,从GTID的编号来看,可以从编号7事件开始进行数据增量恢复;
SET @@GLOBAL.GTID_PURGED=/*!80000 '+'*/ '9d14be39-6423-11ed-bb21-000c2996c4f5:1-6';
-- 输出信息表示增量数据的临界点在binlog.000013日志文件的1312位置,同时是备份结束时的位置点;
CHANGE MASTER TO MASTER_LOG_FILE='binlog.000013', MASTER_LOG_POS=1312;