mysql自帶備份還原工具

mysql自帶的mysqldump備份工具,將制定的數據庫或表導出都一樣的sql文件,以便備份或數據還原,但如果數據量很大,會耗費會很長時間,且鎖表。對於大規模備份,考慮使用物理方法,如:mysqlbackup(適於InnoDB、MyISAM及其他表)、mysqlhotcopy(適於MyISAM表)、Xtrabackup(適於InnoDB及MyISAM表)、LVM(適於各類表)等。
一、數據備份
mysqldump常用備份實例
1.導出所有數據庫
mysqldump   -uroot  -pabc123  --all-databases > all.sql
2.出整個數據庫
mysqldump -u 用戶名 -p  數據庫名 > 導出的文件名
mysqldump -uroot  -pabc123   test> test.sql
導出整個數據庫的表結構 增加-d參數
mysqldump -uroot  -pabc123  -d  test> test.sql
3.導出一個表
mysqldump -u 用戶名 -p 數據庫名 表名> 導出的文件名
mysqldump -uroot  -pabc123   test  user> user.sql
導出一個表的表結構。增加-d參數
mysqldump -uroot  -pabc123   -d test  user> user.sql
4.導出部分數據,加上--where參數
mysqldump -uroot  -pabc123  test score --where="score>=60" > score.sql
5.導出一個表的部分字段
mysqldump -uroot  -pabc123  -e "set names 'utf8';select realname,card_number,company_name from Database.name_v where type=2 and status=1" >name_v.sql -p
注:常用參數說明:
--add-drop-database 在CREATE DATABASE前DROP DATABASE
--add-drop-table 在每個create語句之前增加一個drop table
--add-drop-trigger  在CREATE TRIGGER 前DROP TRIGGER
--default-character-set=charset    指定導出數據時採用何種字符集
--disable-keys   在 INSERT 語句的開頭和結尾增加 /*!40000 ALTER TABLE table DISABLE KEYS */; 和 /*!40000 ALTER TABLE table ENABLE KEYS */; 語句,這能大大提高插入語句的速度,因爲它是在插入完所有數據後才重建索引的。該選項只適合 MyISAM 表。
--lock-all-tables /-x  提交請求鎖定所有數據庫中的所有表,以保證數據的一致性。這是一個全局讀鎖,並且自動關閉--single-transaction 和 --lock-tables 選項。
 --lock-tables  它和 --lock-all-tables 類似,不過是鎖定當前導出的數據表,而不是一下子鎖定全部庫下的表。本選項只適用於 MyISAM 表,如果是 Innodb 表可以用 --single-transaction 選項。
--no-create-info /-t  只導出數據,而不添加 CREATE TABLE 語句
--no-data /-d   不導出任何數據,只導出數據庫表結構。
--routines /-R  導出存儲過程以及自定義函數。
--single-transaction 在導出數據之前提交一個 BEGIN SQL語句,BEGIN 不會阻塞任何應用程序且能保證導出時數據庫的一致性狀態。它只適用於事務表,例如 InnoDB 和 BDB。本選項和 --lock-tables 選項是互斥的,因爲 LOCK TABLES 會使任何掛起的事務隱含提交。要想導出大表的話,應結合使用 --quick 選項。 
--triggers  同時導出觸發器,用 --skip-triggers 禁用它
--events   備份的數據庫備份事件
備份 MyISAM 表:
mysqldump   -uroot  -pabc123 --default-character-set=utf8 --opt --extended-insert=false  --triggers -R --hex-blob -x db_name > db_name.sql
備份 Innodb 表:
mysqldump   -uroot  -pabc123 --default-character-set=utf8 --opt --extended-insert=false --triggers -R --hex-blob --single-transaction db_name > db_name.sql
實現在線備份,可以使用 --master-data 參數來實現
mysqldump   -uroot  -pabc123  --default-character-set=utf8 --opt --master-data=1  --single-transaction --flush-logs db_name > db_name.sql   
在一開始的瞬間請求鎖表,然後就刷新binlog了,而後在導出的文件中加入CHANGE MASTER 語句來指定當前備份的binlog位置,如果要把這個文件恢復到slave裏去,就可以採用這種方法來做。
二、數據還原
用 mysqldump 備份出來的文件是一個可以直接倒入的 SQL 腳本,有兩種方法可以將數據導入。
1. mysql   -uroot  -pabc123  testdb < db.sql
這種方法很容易產生亂碼,因爲:
a,導出數據庫時,你如果忘了設置導出字符集的話,在導入的時候,就有可能會出問題.
b,假如,你導出時設置導出時設置了utf8的編碼,但是你又把你的數據庫現在的字符集改成了gb2312的.這樣又會亂碼。
2.用 source 語句
mysql  -uroot  -pabc123
>use testdb ;
>set names utf8;  #這裏的字符集根你的將要導入的數據庫的字符集一至。
>source db.sql;

參考文章:
發佈了404 篇原創文章 · 獲贊 205 · 訪問量 227萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章