Mysqldump逻辑备份与恢复
文档结构: mysqldump备份影响性能,可能会把内存里面的热数据给冲刷掉,5.7后,新增一个参数,innodb_buffer_pool_dump_pct,控制每个innodb_buffer中转存活跃的使用innodb buffer pages的比例,只有当数据在1s内再次被访问时,才能放到热区域内,避免热数据被刷掉,默认值25%。 ? 重要的参数说明: --single-transaction 用于保证innodb 备份数据时的一致性,配合RR隔离级别一起使用;当发起事物时,读取一个事实的快照,直到备份结束时,都不会读取到本事物开始之前提交的任何数据(这个参数相当重要) --all-databases? (-A) ?备份所有数据库。 --master-data 该参数有1和2,如果等于1 ,就会在备份出来的文件中添加一个change master的语句(后期配置搭建主从架构);如果值等于2,就会在备份出来的文件中添加一个change master语句,并在语句前面添加注释符号(后期配置搭建主从架构)。 --dump-slave 该参数用于从库端备份数据,在线搭建新的从库时使用。 该参数也有1,2两个值,值为1是,也是在备份出来的文件中添加一个change master的语句;值为2时,则会在change master命令前增加注释信息。 --no-create-info(-t) 备份过程中,只备份表数据,并不备份表结构。 --no-data 备份过程中,只备份表结构,并不备份表数据。 --complete-insert 使用完整的insert语句会包含表中的列信息,这么做可以提高插入效率。 --databases 备份多个数据库。 mysqldump -S /tmp/mysql3307.sock -uroot -pmysql --set-gtid-purged=OFF --databases sys test > sys_test.sql --default-character-set 字符集,MYSQL目前默认字符集,要与备份出的表的字符集保持一致。 --quick 相当于加 sql_no_query,意味着并不会读取缓存中的数据。 --where=name 按条件备份出想要的数据。 备份所有数据库/usr/local/mysql5.7/bin/mysqldump --single-transaction -S /tmp/mysql3307.sock --set-gtid-purged=OFF -uroot -pmysql -A >all_20180524.sql 5.7已经开启了GTID,备份过程中不想带GTID信息,加上--set-gtid-purged=OFF 恢复全库的过程先删除test 测试库 ? mysql -S /tmp/mysql3307.sock -uroot -pmysql < all_20180524.sql ? 查看恢复后的数据库: ? 备份单个数据库test的过程:mysqldump -S /tmp/mysql3307.sock -uroot -pmysql --single-transaction --set-gtid-purged=OFF? test > 20180524test.sql ? 恢复单库test的过程:mysql> show databases; +--------------------+ | Database?????????? | +--------------------+ | information_schema | | mysql????????????? | | performance_schema | | sys??????????????? | | test?????????????? | +--------------------+ 5 rows in set (0.00 sec) mysql> drop database test; Query OK,9 rows affected (0.18 sec) mysql> show databases; +--------------------+ | Database?????????? | +--------------------+ | information_schema | | mysql????????????? | | performance_schema | | sys??????????????? | +--------------------+ 4 rows in set (0.00 sec) mysql> create database test; Query OK,1 row affected (0.00 sec) mysql -S /tmp/mysql3307.sock -uroot -pmysql test < 20180524test.sql ? mysql> use test; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> show tables; +----------------+ | Tables_in_test | +----------------+ | t????????????? | | t1???????????? | | t2???????????? | | t3???????????? | | t4???????????? | | tt???????????? | | ttt??????????? | | zs???????????? | | zs1??????????? | +----------------+ 9 rows in set (0.00 sec) 备份单表:mysql> select TABLE_SCHEMA,TABLE_NAME,TABLE_TYPE,ENGINE,TABLE_ROWS from information_schema.TABLES where table_schema='test'; +--------------+------------+------------+--------+------------+ | TABLE_SCHEMA | TABLE_NAME | TABLE_TYPE | ENGINE | TABLE_ROWS | +--------------+------------+------------+--------+------------+ | test???????? | t????????? | BASE TABLE | InnoDB |????????? 6 | | test???????? | t1???????? | BASE TABLE | InnoDB |???? 971290 | | test???????? | t2???????? | BASE TABLE | InnoDB |????????? 3 | | test???????? | t3???????? | BASE TABLE | InnoDB |????????? 3 | | test???????? | t4???????? | BASE TABLE | InnoDB |????????? 3 | | test???????? | tt???????? | BASE TABLE | InnoDB |????????? 4 | | test???????? | ttt??????? | BASE TABLE | InnoDB |????????? 2 | | test???????? | zs???????? | BASE TABLE | InnoDB |????????? 3 | | test???????? | zs1??????? | BASE TABLE | InnoDB |????????? 4 | +--------------+------------+------------+--------+------------+ 9 rows in set (0.00 sec) ? mysqldump -S /tmp/mysql3307.sock -uroot -pmysql --single-transaction --set-gtid-purged=OFF test t1 >20180524_t1.sql 恢复表的过程:先删除,在恢复。 ? mysql -S /tmp/mysql3307.sock -uroot -pmysql test < 20180524_t1.sql ? 注意: 单表恢复的时候,不需要写表的名字,只需要写库的名字。 备份test库t1表的where 条件mysqldump -S /tmp/mysql3307.sock -uroot -pmysql --single-transaction --set-gtid-purged=OFF test t1 --where='RECEIVETIME >="2018-08-31 00:00:00" and? RECEIVETIME <="2018-10-09 00:00:00"' >/data_returnreport.sql 备份test库t1表的结构mysqldump -S /tmp/mysql3307.sock -uroot -pmysql --single-transaction --set-gtid-purged=OFF -d test t1 > 20180504t1_meta.sql ? 或者 mysqldump -S /tmp/mysql3307.sock -uroot -pmysql --single-transaction --set-gtid-purged=OFF --no-data test t1 > 20180504t1_meta01.sql ? 把-d 换成--no-date 备份test库中t表中数据信息:mysqldump -S /tmp/mysql3307.sock -uroot -pmysql --single-transaction --set-gtid-purged=OFF -t test t1 >20180524t1_data.sql ? 从表结构备份和表数据备份中恢复单表? 先恢复表结构,在往里面导数据 ? 查看表结构: ? 恢复数据: mysql -S /tmp/mysql3307.sock -uroot -pmysql test <20180524t1_data.sql ? 备份test库指定条件数据mysqldump -S /tmp/mysql3307.sock -uroot -pmysql --single-transaction --set-gtid-purged=OFF test t1 --where="id>45000" >20180524_t_part.sql ? 注意: where 后面建议为双引号,以防止不识别条件。 查看备份文件: ? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |