此学习文是基于MySQL 8.0写的
得益于大神朋友的悉心指导解决不少坑,才写出此文,向大神奉上膝盖
mydumper
是一个类似mysqlpump
的逻辑备份工具。
与mysqlpump
相比,mydumper
在以下方面具有优势。
mydumper
维护所有线程的快照,提供准确的主库和从库日志位置等。mysqlpump
不保证一致性。mydumper
是一款开源的备份工具,需要单独安装。
官网下载、GitHub下载
# nangy @ nangy-vm in ~/Downloads [17:15:01] C:127
$ wget https://github.com/maxbube/mydumper/releases/download/v0.9.5/mydumper_0.9.5-2.stretch_amd64.deb
# nangy @ nangy-vm in ~/Downloads [17:15:56]
$ sudo gdebi mydumper_0.9.5-2.stretch_amd64.deb
# 重启
# nangy @ nangy-vm in ~/Downloads [17:15:56]
$ shutdown -r now
# nangy @ nangy-vm in ~/Downloads [17:15:56]
$ sudo yum install -y "https://github.com/maxbube/mydumper/releases/download/v0.9.5/mydumper-0.9.5-2.el7.x86_64.rpm"
以下命令会将所有数据库备份到/data/backups
文件夹中:
$ mydumper -u root --password='{password}' --outputdir /data/backups/full_backup
多个文件将在/data/backups
文件夹中被创建,(如果目录未创建,则使用sudo mkdir -pv /data/backups/full_backup
)
CREATE DATABASE
语句均为-schema-create.sql
.-schema.sql
- 数据文件存储为
..sql
- 视图存储为
.-schema-view.sql
- 存储的例程、触发器和事件存储为
-schema-post.sql
# 执行备份
# nangy @ nangy-vm in ~ [18:32:54]
$ mydumper -u root --password='{password}' --outputdir /data/backups/full_backup
# 查看备份
# nangy @ nangy-vm in ~ [18:49:20]
$ ll /data/backups/full_backup/company*
-rw-r--r-- 1 nangy nangy 131 8月 13 18:15 /data/backups/company-schema-create.sql
-rw-r--r-- 1 nangy nangy 404 8月 13 18:15 /data/backups/company.customers-schema.sql
-rw-r--r-- 1 nangy nangy 273 8月 13 18:15 /data/backups/company.customers.sql
-rw-r--r-- 1 nangy nangy 301 8月 13 18:15 /data/backups/company.payments-schema.sql
-rw-r--r-- 1 nangy nangy 181 8月 13 18:15 /data/backups/company.payments.sql
2. 踩坑
- 身份验证插件报错
mydumper不兼容MySQL 8.0 的默认身份验证插件caching_sha2_password
,修改备份用户(学习嘛,简单点,我用的root用户备份)的插件类型为mysql_native_password
即可。
- 参考:
Linux - MySQL 8.0(二)基本操作:远程连接(Yum、Apt) → 坑!
MySQL - MySQL 8.0(二)基本操作:用户 → 修改密码&身份验证插件类型
# nangy @ nangy-vm in ~ [18:01:38]
$ mydumper -u root --password --outputdor /data/backups/full_backup
** (mydumper:6667): CRITICAL **: Error connecting to database: Authentication plugin 'caching_sha2_password' cannot be loaded: /usr/lib/mysql/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory
# 登录root用户,修改成旧的身份验证插件
mysql> alter user 'root'@'localhost' identified with mysql_native_password by '{new_password}';
- 查询超时报错
如果有任何查询超过60秒,mydumper
将失败并出现以下错误提示:
** (mydumper:18754): CRITICAL **: There are queries in PROCESSLIST running longer than 60s, aborting dump,use --long-query-guard to change the guard value, kill queries (--kill-long-queries) or use different server for dump
为了避免这种情况,可以使用--kill-long-queries
选项,或将--long-query-guard
设置为更大的值。
--kill-long-queries
选项会结束所有长于60秒(或--long-query-guard
设置的值)的查询。请注意--kill-long-queries
还会因为一个 bug 而杀死复制线程( https://bugs.launchpad.net/mydumper/+bug/1713201 ):
# nangy @ nangy-vm in ~ [18:01:38]
$ sudo mydumper --kill-long-queries --outputdir /data/backups/full_backup
** (mydumper:18915): WARNING **: Using trx_consistency_only, binlog coordinates will not be accurate if you are writing to non transactional tables.
** (mydumper:18915): WARNING **: Killed a query that was running for 368s
一致的备份
备份目录中的元数据文件包含用于一致备份的二进制日志坐标。
在主服务器上,备份目录中的元数据文件会捕获二进制日志位置:
# nangy @ nangy-vm in ~ [9:13:04] C:1
$ sudo cat /data/backups/full_backup/metadata
Started dump at: 2019-08-14 09:08:12
SHOW MASTER STATUS:
Log: binlog.000065
Pos: 155
GTID:
Finished dump at: 2019-08-14 09:08:16
在从服务器上,备份目录中的元数据文件会捕获主服务器和从服务器的二进制日志位置
备份单独表
以下命令会将employees
数据库的employees
表备份到/data/backups/table_backup
目录中
# nangy @ nangy-vm in ~ [9:13:16]
$ mydumper -u root --password='{password}' -B employees -T employees --triggers events --routines --outputdir /data/backups/table_backup
# nangy @ nangy-vm in ~ [9:30:47]
$ ll /data/backups/table_backup
总用量 17M
-rw-r--r-- 1 nangy nangy 133 8月 14 09:29 employees-schema-create.sql
-rw-r--r-- 1 nangy nangy 597 8月 14 09:29 employees.employees-schema.sql
-rw-r--r-- 1 nangy nangy 977 8月 14 09:29 employees-schema-post.sql
-rw-r--r-- 1 nangy nangy 17M 8月 14 09:29 employees.employees.sql
-rw-r--r-- 1 nangy nangy 133 8月 14 09:29 metadata
这些文件的命名规则如下:
- employees-schema-create.sql包含
CREATE DATABASE
语句。
- employees.employees-schema.sql包含
CREATE TABLE
语句。
- employees-schema-post.sql包含
ROUTINES
、TRIGGERS
和EVENTS
。
- employees.employees.sql包含
INSERT
语句形式表示的实际数据。
使用正则表达式来备份特定的数据库
可以使用regex
选项包含/排除特定数据库。以下命令将从备份中排除mysql
和test
数据库:
# nangy @ nangy-vm in ~ [9:37:43]
$ mydumper -u root --password='{password}' --regex '(?!(mysql|test))' --outputdir /data/backups/regex_backup
# nangy @ nangy-vm in ~ [9:42:47]
$ ll /data/backups/regex_backup/company*
-rw-r--r-- 1 nangy nangy 404 8月 14 09:42 /data/backups/regex_backup/company.customers-schema.sql
-rw-r--r-- 1 nangy nangy 273 8月 14 09:42 /data/backups/regex_backup/company.customers.sql
-rw-r--r-- 1 nangy nangy 301 8月 14 09:42 /data/backups/regex_backup/company.payments-schema.sql
-rw-r--r-- 1 nangy nangy 181 8月 14 09:42 /data/backups/regex_backup/company.payments.sql
-rw-r--r-- 1 nangy nangy 131 8月 14 09:42 /data/backups/regex_backup/company-schema-create.sql
采用mydumper备份大表
为了加速大表的转储和恢复,可以将它分成小块。块的大小可以通过它包含的行数来指定,每个块将被写入一个单独的文件中。
# nangy @ nangy-vm in ~ [9:51:11] C:1
$ mydumper -u root --password='{password}' -B employees -T employees --triggers --events --routines --rows=10000 -t 8 --trx-consistency-only --outputdir /data/backups/bigtable_backup
** (mydumper:9911): WARNING **: Using trx_consistency_only, binlog coordinates will not be accurate if you are writing to non transactional tables.
--rows
:将表分成块,每一块的数据行数。
-t
:指定线程的数量。
--trx-consistency-only
:如果只使用事务表,例如InnoDB,那么使用此选项将使锁定最小化。
对于每一个块,都会创建一个名为...sql
的文件,其中数字用零填充,补足5位:
# nangy @ nangy-vm in ~ [9:51:29]
$ ll /data/backups/bigtable_backup
总用量 17M
-rw-r--r-- 1 nangy nangy 964K 8月 14 09:51 employees.employees.00000.sql
-rw-r--r-- 1 nangy nangy 964K 8月 14 09:51 employees.employees.00001.sql
-rw-r--r-- 1 nangy nangy 963K 8月 14 09:51 employees.employees.00002.sql
-rw-r--r-- 1 nangy nangy 964K 8月 14 09:51 employees.employees.00003.sql
-rw-r--r-- 1 nangy nangy 964K 8月 14 09:51 employees.employees.00004.sql
-rw-r--r-- 1 nangy nangy 896K 8月 14 09:51 employees.employees.00005.sql
-rw-r--r-- 1 nangy nangy 562 8月 14 09:51 employees.employees.00006.sql
-rw-r--r-- 1 nangy nangy 741K 8月 14 09:51 employees.employees.00011.sql
-rw-r--r-- 1 nangy nangy 981K 8月 14 09:51 employees.employees.00012.sql
-rw-r--r-- 1 nangy nangy 981K 8月 14 09:51 employees.employees.00013.sql
-rw-r--r-- 1 nangy nangy 980K 8月 14 09:51 employees.employees.00014.sql
-rw-r--r-- 1 nangy nangy 980K 8月 14 09:51 employees.employees.00015.sql
-rw-r--r-- 1 nangy nangy 981K 8月 14 09:51 employees.employees.00016.sql
-rw-r--r-- 1 nangy nangy 160K 8月 14 09:51 employees.employees.00017.sql
-rw-r--r-- 1 nangy nangy 901K 8月 14 09:51 employees.employees.00023.sql
-rw-r--r-- 1 nangy nangy 980K 8月 14 09:51 employees.employees.00024.sql
-rw-r--r-- 1 nangy nangy 981K 8月 14 09:51 employees.employees.00025.sql
-rw-r--r-- 1 nangy nangy 980K 8月 14 09:51 employees.employees.00026.sql
-rw-r--r-- 1 nangy nangy 981K 8月 14 09:51 employees.employees.00027.sql
-rw-r--r-- 1 nangy nangy 980K 8月 14 09:51 employees.employees.00028.sql
-rw-r--r-- 1 nangy nangy 597 8月 14 09:51 employees.employees-schema.sql
-rw-r--r-- 1 nangy nangy 133 8月 14 09:51 employees-schema-create.sql
-rw-r--r-- 1 nangy nangy 977 8月 14 09:51 employees-schema-post.sql
-rw-r--r-- 1 nangy nangy 133 8月 14 09:51 metadata
无阻塞备份
为了提供一致的备份,mydumper通过执行FLUSH TABLES WITH READ LOCK
来获取GLOBAL LOCK
。
如果有任何长时间运行的事务,使用FLUSH TABLES WITH READ LOCK
是很危险的。为了避免这种情况,可以传递--kill-long-queries
选项来终止阻塞查询,而不是中止mydumper。
--trx-consistency-only
:相当于mysqldump的--single-transaction
,但具有binlog位置。显然,这个位置只适用于事务表。使用这个选项的好处之一是全局读锁只保持在线程的协调过程中,所以一旦事务开始,该选项就会被释放。
--use-savepoints
:减少元数据锁定问题(需要SUPER
权限)。
压缩备份
可以指定--compress
选项来进行压缩备份:
# nangy @ nangy-vm in ~ [9:52:21]
$ mydumper -u root --password='{password}' -B employees -T employees -t 8 --trx-consistency-only --compress --outputdir /data/backups/compress_backup
** (mydumper:10893): WARNING **: Using trx_consistency_only, binlog coordinates will not be accurate if you are writing to non transactional tables.
# nangy @ nangy-vm in ~ [10:14:25]
$ ll /data/backups/compress_backup
总用量 5.3M
-rw-r--r-- 1 nangy nangy 353 8月 14 10:14 employees.employees-schema.sql.gz
-rw-r--r-- 1 nangy nangy 5.3M 8月 14 10:14 employees.employees.sql.gz
-rw-r--r-- 1 nangy nangy 136 8月 14 10:14 employees-schema-create.sql.gz
-rw-r--r-- 1 nangy nangy 133 8月 14 10:14 metadata
仅备份数据
可以使用--no-schemas
选项来跳过schema并且仅备份数据:
# nangy @ nangy-vm in ~ [10:15:49]
$ mydumper -u root --password='{password}' -B employees -T employees -t 8 --no-schemas --trx-consistency-only --outputdir /data/backups/no-schemas_backup
** (mydumper:11187): WARNING **: Using trx_consistency_only, binlog coordinates will not be accurate if you are writing to non transactional tables.
# nangy @ nangy-vm in ~ [10:18:12]
$ ll /data/backups/no-schemas_backup
总用量 17M
-rw-r--r-- 1 nangy nangy 17M 8月 14 10:18 employees.employees.sql
-rw-r--r-- 1 nangy nangy 133 8月 14 10:18 metadata
你可能感兴趣的:(#,MySQL)