redhat下MySQL主從備份 在一家小公司做Java程序員,除了編代碼,做的事情也很雜,這次有機會接觸到MySQL數據的主從備份,之前部門老大有做過一次主從,也算是有一份check list照做,即使這樣,中間還是出了很多問題,經過幾天的折騰,今天算是把問題解決了,因此決定寫一篇博客記錄一下,方便以後遇上類似的問題的時候查看,也希望能給遇到相同問題的人帶來幫助! 前置條件:兩台DB服務器,MySQL版本都是5.5.29,一個數據庫在用,一個用來備份。 目標:將兩個db做成主從備份,實現自動備份 步驟:1,停掉使用數據庫的程序,以sql的形式備份數據庫並將數據同步到備份數據庫。 2,編輯主數據庫的/etc/my.cnf文件,在mysqld部分添加如下代碼 Java代碼 server-id = 1 #用來標識主數據庫,如果有多個數據庫做主從,這個數字要唯一 log_bin = /var/log/mysql/mysql-bin.log #確保此文件可寫 read-only =0 #主機,讀寫都可以 binlog-do-db =test #需要備份數據,多個寫多行 binlog-ignore-db=mysql #不需要備份的數據庫,多個寫多行 3,修改了my.cnf文件,重啟主數據庫,service mysql restart 4,創建備份用的數據庫用戶,並給從機授權,這裡直接授權並刷新數據庫權限,MySQL會自動先創建 用戶 Sql代碼 GRANT REPLICATION SLAVE ON *.* TO ‘slave’@’192.168.1.101‘ IDENTIFIED BY ‘123456’; FLUSH PRIVILEGES; 5,修改從機my.cnf文件,,在mysqld部分添加如下代碼並重啟MySQL Xml代碼 server-id = 2 log_bin = /var/log/mysql/mysql-bin.log replicate-do-db =test #只復制某個庫 replicate-ignore-db=mysql #不復制某個庫 6,在從機上設置主機的信息,登錄mysql,執行下面的sql語句 mysql>stop slave; mysql>CHANGE MASTER TO MASTER_HOST=’192.168.1.100’, MASTER_USER=’slave’, MASTER_PASSWORD=’123456‘, MASTER_LOG_FILE=’mysql-bin.0xx‘, MASTER_LOG_POS=33421; mysql>start slave; 7,上面代碼中的Master_host為主機的地址,master_user和pwd分別是主機上創建的用於備份的slave用戶和對應的密碼,master_log_file和log_pos非常重要,設置錯了就很容易出現1236的錯誤 Sql代碼 Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file' 8,因此為了避免出錯,在執行步驟6之前,先登錄主機MySQL,執行下面的sql語句查看主機的log file和log pos,然後在步驟6執行sql語句的時候將對應的信息寫對 Sql代碼 show master status; 9,上面的步驟完成之後,主從就算是配置好了,在從機上可以使用show slave status sql命令查看slave的狀態,如果slave_io_running和slave_sql_running都顯示yes表示成功了!可以在主數據庫上執行更新和插入的操作,然後到從機數據庫中驗證! ps:最初是5.5.29版本,使用了上面的方法配置,沒能成功,網上也找了很多原因,都以失敗告終,今天將數據庫版本替換成5.6.10之後使用上面的方法才配置成功的。先將數據備份好 ,rpm -qa|grep -i mysql查看已經安裝的mysql,然後使用rpm -e ***mysql的方法卸載mysql,清空/var/lib/mysql下的binlog和錯誤日志文件,清空後注意要編輯mysql-bin.index文件,將裡面對應的信息刪除,然後保存,安裝時可以將原來配置好的my.cnf文件移走,等安裝成功後再覆蓋回來。