Fedora MySQL完整備份數據的恢復
Fedora MySQL對于電腦使用的玩家的常用軟件,然后我就學習及深入的研究Fedora MySQL,在這里和大家一起探討Fedora MySQL的使用方法,希望對大家有用。
一、實驗環境
系統版本:Fedora 10 MySQL版本: Fedora MySQL 5.0
二、Fedora MySQL完整備份
如果你的數據庫允許停止服務并且需要備份數據量很大,你可以停止服務后直接復制數據庫對應的文件:/var/lib/mysql/database 這樣的每個數據庫對應于一個實際的目錄,直接復制備份即可。
如果你的Fedora MySQL服務器不允許停止服務,那么我們可以使用Fedora MySQL的熱備份工具:Fedora MySQLldump,它的原理是把數據庫內的內容全部用sql語句進行描述,這樣做的好處是我們導出來的這些sql語句只需簡單的批量修改一些和別的數據庫不兼容的地方,就能把Mysql的數據導出到oracle等其它數據庫內。
mysqldump -uroot -p test > /tmp/test.sql 這條語句導出了test表到test.sql文件中,我們來看下導出的主要內容吧:
- -- Table structure for table `books`
- DROP TABLE IF EXISTS `books`;
- SET @saved_cs_client = @@character_set_client;
- SET character_set_client = utf8;
- CREATE TABLE `books` (
- `id` int(11) default NULL,
- `name` text,
- `publish` date default NULL,
- `author` text
- ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
- SET character_set_client = @saved_cs_client;
- -- Dumping data for table `books`
- LOCK TABLES `books` WRITE;
- INSERT INTO `books` VALUES (0,'Go to China','2002-10-21','Jim');
我們可以看到創建表和插入數據的sql語句。
三、Fedora MySQL數據的恢復
有了完整備份和二進制日志,如果發生一些誤操作或數據庫當機,我們就能夠利用完全備份以及二進制日志來把我們發生誤操作之前的內容恢復出。舉例:我們在完整備份后,對數據庫有刪除和更新記錄等操作,隨后有人誤操作,把整個表全部清空,我們現在來恢復到清空前的狀態。首先,實驗的前提是在打來了二進制日志的情況下,去/etc/my.conf下,添加:log-bin=BinLog binlog-do-db=test
當服務重新運行起來之后,進入Fedora MySQL
- mysql>show master status;
- +---------------------+---------------+--------------------+-------------------------------+
- | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
- +---------------------+---------------+--------------------+-------------------------------+
- | BinLog.000003 | 98 | test | |
- +---------------------+---------------+--------------------+-------------------------------+
提示我們test這個數據庫當前在用BinLog.000003這個二進制日志記錄。下面,我們開始模擬一些操作:
- mysql> insert into books set
- -> id=2,
- -> name='Learn C++',
- -> publish='2003-01-12',
- -> author='jak'
- -> ;
- mysql> update books set author='Jerry' where id=0; delete from books;
誤操作以后,我們發現數據全部清空了,下面開始回復。首先是恢復到完全備份:Fedora MySQLdump -uroot -p test < /tmp/test.sql 接下來,我們用二進制日志來恢復后來一直到清除表以前的操作:首先我們看下完全備份文件的時間戳:stat /tmp/test.sql | grep Change Change: 2009-05-22 21:56:42.000000000 +0800 可以看到,完全備份完成的時間是2009-05-22 21:56:42,我們使用這個時間作為二進制日志回復的開始時間。
接下來,我們需要知道清空表的那個操作執行的時間:mysqlbinlog /var/lib/mysql/BinLog.000003我們找到delete from books這條句子,查看時間。#090522 22:24:12 server id 1 end_log_pos 532 Query thread_id=3 exec_time=0 error_code=0 SET TIMESTAMP=1243002252/*!*/; delete from books
可見刪除發生的時間為090522 22:24:12這樣,我們就確定了開始的時間和結束的時間,接下來開始重新執行完全備份到發生誤操作這段時間內的這些操作。mysqlbinlog --start-date="2009-05-22 21:56:42" --stop-date="2009-05-22 22:24:12" /var/lib/mysql/BinLog.000003 | mysql -uroot -p執行完后,我們去數據庫內可以驗證一下。
由于二進制日志對操作的時間記錄精確到秒,如果我們一秒內發生多個操作就不能這樣了,我們可以用另外一個選項。mysqlbinlog --start-position=”****” --stop-position=”*****” /var/lib/mysql/BinLog.000003 | mysql -uroot以上的****表示對應的操作在二進制日志內的POS數值,我們需要自己從日志中得到這個數據來確定,讀者可以嘗試之。
四、AB復制
Ab復制可以使兩個數據庫服務器在運行中保持某個庫或全部庫內容的一致,其原理基于Fedora MySQL的二進制日志會不斷的記錄對數據庫的所有操作,只要我們初期兩個數據庫內容一致的話,讓主服務器打開某個庫的二進制日志、從數據庫在相同的庫內容的基礎上接受主服務的日志并執行相同的操作。主服務器IP:192.168.0.32 從服務器IP:192.168.0.21
1、首先我們需要打開主服務器需要同步的庫的二進制日志功能:修改/etc/my.conf
[mysqld]
server-id=1 //修改服務器ID log-bin=BinLog //二進制日志文件名binlog-do-db=test //對test這個庫執行二進制日志操作接下來我們重啟主服務器,并且添加一個授權用戶讓從服務器獲取日志使用:
service mysqld restart;Fedora MySQL>grant replication slave,reload,super on test.* to slave@192.168.0.21 identified by 'slavepass'mysql>flush privileges #刷新授權表以上操作完成后我們從從服務器使用新賬戶登錄一下主服務器,檢驗是否連接成功。mysql -uslave -pslavepass -h191.168.0.21
2、從服務器的設置稍復雜一些,首先是修改/etc/my.conf
增加這些內容:
- [mysqld]
- server-id=2
- master-host=192.168.0.32
- master-user=slave
- master-password=slavepass
Fedora MySQL配置完成后,我們需要重啟服務:
- service mysqld restart進入從服務器的mysql客戶端,
- mysql>start slave;
- mysql>load data from master;
- mysql>show slave status"G; #顯示從服務器狀態
Fedora MySQL上面的命令的返回結果:
- Slave_IO_State: Waiting for master to send event
- Master_Host: 192.168.0.32 #主服務器IP地址
- Master_User: slave #用戶名
- Master_Port: 3306
- Connect_Retry: 60
- Master_Log_File: BinLog.000002 #讀取的主服務器的二進制日志
- Read_Master_Log_Pos: 98 #讀取到的二進制日志的位置
- Relay_Log_File: mysqld-relay-bin.000006
- Relay_Log_Pos: 232
- Relay_Master_Log_File: BinLog.000002
- Slave_IO_Running: Yes #IO是否已經啟動
- Slave_SQL_Running: Yes #SQL是否已經啟動
3、Fedora MySQL測試服務是否正常
我們看到以上的從Fedora MySQL服務器狀態后,可以在主服務器操作test這個庫,增加表,插入數據,刪除更新等操作都會在從服務器上全部復制出來。
【編輯推薦】