Mysqldump逻辑备份与恢复
文檔結(jié)構(gòu):
?
mysqldump備份影響性能,可能會(huì)把內(nèi)存里面的熱數(shù)據(jù)給沖刷掉,5.7后,新增一個(gè)參數(shù),innodb_buffer_pool_dump_pct,控制每個(gè)innodb_buffer中轉(zhuǎn)存活躍的使用innodb buffer pages的比例,只有當(dāng)數(shù)據(jù)在1s內(nèi)再次被訪問時(shí),才能放到熱區(qū)域內(nèi),避免熱數(shù)據(jù)被刷掉,默認(rèn)值25%。
?
?
重要的參數(shù)說明:
?
--single-transaction
用于保證innodb 備份數(shù)據(jù)時(shí)的一致性,配合RR隔離級(jí)別一起使用;當(dāng)發(fā)起事物時(shí),讀取一個(gè)事實(shí)的快照,直到備份結(jié)束時(shí),都不會(huì)讀取到本事物開始之前提交的任何數(shù)據(jù)(這個(gè)參數(shù)相當(dāng)重要)
?
--all-databases? (-A)
?備份所有數(shù)據(jù)庫。
?
--master-data
該參數(shù)有1和2,如果等于1 ,就會(huì)在備份出來的文件中添加一個(gè)change master的語句(后期配置搭建主從架構(gòu));如果值等于2,就會(huì)在備份出來的文件中添加一個(gè)change master語句,并在語句前面添加注釋符號(hào)(后期配置搭建主從架構(gòu))。
?
--dump-slave
該參數(shù)用于從庫端備份數(shù)據(jù),在線搭建新的從庫時(shí)使用。
該參數(shù)也有1,2兩個(gè)值,值為1是,也是在備份出來的文件中添加一個(gè)change master的語句;值為2時(shí),則會(huì)在change master命令前增加注釋信息。
?
--no-create-info(-t)
?
備份過程中,只備份表數(shù)據(jù),并不備份表結(jié)構(gòu)。
?
--no-data
備份過程中,只備份表結(jié)構(gòu),并不備份表數(shù)據(jù)。
?
--complete-insert
使用完整的insert語句會(huì)包含表中的列信息,這么做可以提高插入效率。
?
--databases
備份多個(gè)數(shù)據(jù)庫。
mysqldump -S /tmp/mysql3307.sock -uroot -pmysql --set-gtid-purged=OFF --databases sys test > sys_test.sql
?
--default-character-set
字符集,MYSQL目前默認(rèn)字符集,要與備份出的表的字符集保持一致。
?
--quick
相當(dāng)于加 sql_no_query,意味著并不會(huì)讀取緩存中的數(shù)據(jù)。
?
--where=name
按條件備份出想要的數(shù)據(jù)。
?
備份所有數(shù)據(jù)庫
/usr/local/mysql5.7/bin/mysqldump --single-transaction -S /tmp/mysql3307.sock --set-gtid-purged=OFF -uroot -pmysql -A >all_20180524.sql
5.7已經(jīng)開啟了GTID,備份過程中不想帶GTID信息,加上--set-gtid-purged=OFF
恢復(fù)全庫的過程
先刪除test 測試庫
?
?
mysql -S /tmp/mysql3307.sock -uroot -pmysql < all_20180524.sql
?
?
查看恢復(fù)后的數(shù)據(jù)庫:
?
?
備份單個(gè)數(shù)據(jù)庫test的過程:
mysqldump -S /tmp/mysql3307.sock -uroot -pmysql --single-transaction --set-gtid-purged=OFF? test > 20180524test.sql
?
?
恢復(fù)單庫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
?
恢復(fù)表的過程:
先刪除,在恢復(fù)。
?
?
mysql -S /tmp/mysql3307.sock -uroot -pmysql test < 20180524_t1.sql
?
?
注意:
單表恢復(fù)的時(shí)候,不需要寫表的名字,只需要寫庫的名字。
?
備份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表的結(jié)構(gòu)
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表中數(shù)據(jù)信息:
mysqldump -S /tmp/mysql3307.sock -uroot -pmysql --single-transaction --set-gtid-purged=OFF -t test t1 >20180524t1_data.sql
?
?
?
從表結(jié)構(gòu)備份和表數(shù)據(jù)備份中恢復(fù)單表
?
?
先恢復(fù)表結(jié)構(gòu),在往里面導(dǎo)數(shù)據(jù)
?
?
查看表結(jié)構(gòu):
?
?
恢復(fù)數(shù)據(jù):
mysql -S /tmp/mysql3307.sock -uroot -pmysql test <20180524t1_data.sql
?
?
備份test庫指定條件數(shù)據(jù)
?
mysqldump -S /tmp/mysql3307.sock -uroot -pmysql --single-transaction --set-gtid-purged=OFF test t1 --where="id>45000" >20180524_t_part.sql
?
?
注意:
where 后面建議為雙引號(hào),以防止不識(shí)別條件。
?
查看備份文件:
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/hmwh/p/9083399.html
與50位技術(shù)專家面對面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的Mysqldump逻辑备份与恢复的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (扫盲)RPC远程过程调用
- 下一篇: 004 IOC---IOC容器