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 后面建議為雙引號,以防止不識別條件。
?
查看備份文件:
?
?
轉載于:https://www.cnblogs.com/hmwh/p/9083399.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的Mysqldump逻辑备份与恢复的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (扫盲)RPC远程过程调用
- 下一篇: Confluence 6 设置 Orac