邏輯備份--mysqldump

starive發表於2014-10-14

邏輯備份--mysqldump

  本部落格就邏輯備份做一個較為詳細的整理,希望能為各位網友帶來技術和知識上的便利。如有任何不足,歡迎部落格留言或者站內簡訊。
詳看官方文件 “Chapter 7 Backup and Recovery Types”  7.4 Using mysqldump for Backups

一  備份

1 備份一個資料庫

mysqldump -u使用者名稱 -p密碼 --opt dbname > filename.sql

Eg:
備份資料庫starive2
  1. sudo mysqldump -uroot -p密碼 starive2 > /home/*****/mysql/backup/starive2.sql

邏輯備份後檔案starive2.sql內容:




備份所有的資料庫: ????有問題,沒有成功

  1. mysqldump -uroot -p*** -all-database > /home/*****/mysql/backup/alldatabase.sql

錯誤:
mysqldump: Got error: 2002: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) when trying to connect

2  備份資料庫starive 下的表emp:
  1. sudo mysqldump -uroot -p*** starive emp > /home/*****/mysql/backup/starive_emp.sql

3  備份系統資料庫Mysql下的表 db:
  1. sudo mysqldump -uroot -p*** mysql db > /home/*****/mysql/backup/mysql_db.sql


4  How to make a copy a database

sudo mysqldump -uroot -p123 starive > /home/gaoyu/backup/starive.sql

sudo mysql -uroot -p123 starive2 < /home/gaoyu/backup/starive.sql


5  How to copy a database from one server to another

On Server 1:
shell> mysqldump --databases db1 > dump.sql
Copy the dump file from Server 1 to Server 2.

On Server 2:
shell> mysql < dump.sql


6  How to dump stored programs (stored procedures and functions, triggers, and events)
引數如下:

? --events: Dump Event Scheduler events
? --routines: Dump stored procedures and functions
? --triggers: Dump triggers for tables


7  How to dump definitions and data separately

sudo mysqldump -uroot -p123 --no-data starive > /home/gaoyu/backup/starive_defs.sql

sudo mysqldump -uroot -p123 --no-create-info starive > /home/gaoyu/backup/starive_data.sql





二  恢復

恢復分為完全恢復和不完全恢復。(這兩者區別可參看部落格:http://blog.chinaunix.net/uid-167175-id-3512379.html

1  完全恢復

To see a listing of all binary log files, use this statement:
mysql> SHOW BINARY LOGS;
To determine the name of the current binary log file, issue the following statement:
mysql> SHOW MASTER STATUS;


語法:

  1. mysql -uroot -p databasename < ***.sql
注意上面備份恢復後資料並不完整,還要將備份後執行的日誌進行重做,語法如下:

  1. mysqlbinlog binlog-file | msyql -u root -p databasename


Eg:

自己先把備份與恢復弄清楚。
把 /home/*****/mysql/backup下的 starive2.sql刪除掉。
重新備份資料庫 starive2


然後往資料庫 starive2 裡面插入一條記錄:
 insert into t1 values(3,'lili');


現在突然發生故障了,資料無法訪問。需要恢復備份:
sudo mysql -uroot -p starive2 < /home/*****/mysql/backup/starive2.sql

備份後圖片如下:

注意:上面的 第一個”select *from t1;“ 是備份後恢復前的查詢結果(備份後新插入了一條記錄);第二個 ”select *from t1;“是恢復以後的查詢結果


使用msyqlbinlog來恢復子mysqldump備份以來的binlog: 
mysqlbinlog mysql-bin.000001 | mysql -u root -pgao starive2

報錯如下:
The program 'mysqlbinlog' is currently not installed.  You can install it by typing:
sudo apt-get install mysql-server-5.5
?????


  2  不完全恢復

2.1 基於時間點恢復

mysqlbinlog --stop-datetime="2005-04-20 9:59:59" /var/log/mysql/bin.123456 | mysql -u root -p

mysqlbinlog --start-datetime="2005-04-20 10:01:00" /var/log/mysql/bin.123456 | mysql -u root -p



2.2 基於位置恢復

(1)在shell下執行如下命令:
mysqlbinlog --start-datetime="2005-04-20 9:55:00"  --stop-datetime="2005-04-20 10:05:00"  /var/log/mysql/bin.123456 > /tmp/mysql_restore.sql
該命令將在/tmp目錄建立小的文字檔案,編輯此檔案,找到出錯語句前後的位置號,例如前後位置號分別是 368312和368315

(2)恢復了以前的備份檔案後,應從命令列輸入下面的內容:
shell> mysqlbinlog --stop-position=368312 /var/log/mysql/bin.123456 | mysql -u root -p
shell> mysqlbinlog --start-position=368315 /var/log/mysql/bin.123456 | mysql -u root -p


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26435490/viewspace-1298137/,如需轉載,請註明出處,否則將追究法律責任。

相關文章