介绍
mydumper是一个逻辑备份工具,类似于mysqlpump。
mydumper比mysqldump具有以下优势:
- 并行性(速度快)和性能(避免昂贵的字符集转换例程并且整体上具有高效的代码)。
- 一致性。 它维护所有线程的快照,提供准确的主从日志位置,等等。 mysqlpump不保证一致性。
- 更容易管理输出(表和转储元数据的单独文件,并且很容易查看/解析数据)。 mysqlpump将所有内容写入一个文件,这限制了加载选择性数据库对象的选项。
- 使用正则表达式包含和排除数据库对象。
- 用于终止阻止备份和所有后续查询的长时间运行事务的选项。
安装
源码安装
shell> yum install glib2-devel mysql-devel zlib-devel pcre-devel cmake gcc-c++ git
shell> cd /opt
shell> git clone https://github.com/maxbube/mydumper.git
shell> cd mydumper
shell> cmake .
shell> make
shell> make install
YUM安装
#YUM
shell> yum install -y "https://github.com/maxbube/mydumper/releases/download/v0.9.3/mydumper-0.9.3-41.el7.x86_64.rpm"
#APT
shell> wget "https://github.com/maxbube/mydumper/releases/download/v0.9.3/mydumper_0.9.3-41.jessie_amd64.deb"
shell> sudo dpkg -i mydumper_0.9.3-41.jessie_amd64.deb
shell> sudo apt-get install -f
备份
全备
以下命令将所有数据库备份到/backups文件夹中:
shell> mydumper --user=<user> --password=<password> --outputdir /backups
在/backups文件夹下会创建很多文件,每个数据库的CREATE DATABASE语句都为<database_name>-schema-create.sql,每个表都有自己的模式和数据文件。 模式文件存储为<database_name>.
-schema.sql,数据文件存储为<database_name>.视图存储为<database_name>.
-schema-view.sql。 存储的例程,触发器和事件存储为<database_name>-schema-post.sql(如果未创建目录,则使用mkdir -pv /backups):如果有任何超过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设置的值。
shell> mydumper --user=<user> --password=<password> --kill-long-queries --outputdir /backups
一致的备份
备份目录中的元数据文件包含用于一致备份的二进制日志坐标。
在主服务器上,它捕获二进制日志位置:
shell> mydumper --user=root --password=root --kill-long-queries --outputdir /app/mysql/mysqldata/backup/
shell> cat /app/mysql/mysqldata/backup/metadata
在从站上,它捕获主站和从站的二进制日志位置,自行查看
备份单表
以下命令将employees数据库的employees表备份到/backups目录中:
shell> mydumper -u root --password=<password> -B employees -T employees --triggers --events --routines --outputdir /backups/employee_table
- 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和测试数据库:
shell> mydumper -u root --password=<password> --regex '^(?!(mysql|test))' --outputdir /backups/specific_dbs
利用mydumper备份超大表
要加快转储和恢复大表的速度,可以将其拆分为小块。 块大小可以通过它包含的行数来指定,每个块将被写入一个单独的文件中:
shell> mydumper -u root --password=<password> -B employees -T employees --triggers --events --routines --rows=10000 -t 8 --trx-consistency-only --outputdir /backups/employee_table_chunks
- -t: 指定线程数
- –trx-consistency-only: 这个参数会在备份的时候尽量采用最小化锁保证一致性
- –rows: 将表拆分为此行数的块
非阻塞备份
为了提供一致的备份,mydumper通过执行带有READ LOCK的FLUSH TABLES获取GLOBAL LOCK。
已经看到如果有任何长时间运行的事务,使用FLUSH TABLES WITH READ LOCK是多么危险。 为避免这种情况,您可以传递–kill-long-queries选项来终止阻塞查询而不是中止mydumper。
- –trx-consistency-only: 他的功能和mysqldump的–single-transaction一样但是包含binlog的位置,这个位置仅仅适用于事务表, 使用此选项的一个优点是全局读锁仅用于线程的协调,因此一旦启动事务就会释放它。
- –use-savepoints: 减少元数据锁定问题
压缩备份
shell> mydumper -u root --password=<password> -B employees -T employees -t 8 --trx-consistency-only --compress --outputdir /backups/employees_compress
只备份数据
shell> mydumper -u root --password=<password> -B employees -T employees -t 8 --no-schemas --compress --trx-consistency-only --outputdir /backups/employees_data