mysql 主從

Mysql雙機備份方案

文章分類:數據庫

運行環境:
虛擬機安裝的是CentOS5
Mysql版本:5.1.31- log MySQL Community Server (GPL)

操作步驟:
1.  在主從服務器上分別安裝mysql

shell> groupadd mysql
shell> useradd -g mysql mysql
shell> cd /usr/local
shell> gunzip < /path/to/mysql-VERSION-OS.tar.gz | tar xvf -
shell> ln -s full-path-to-mysql-VERSION-OS mysql
shell> cd mysql
shell> chown -R mysql .
shell> chgrp -R mysql .
shell> scripts/mysql_install_db --user=mysql
shell> chown -R root .
shell> chown -R mysql data
shell> bin/mysqld_safe --user=mysql &



2. 配置主服務器
2.1 先登錄主機(59.57.251.56)

mysql>grant all on *.* to root@'%' identified by '1234';  -- 添加權限(賦予從機權限,有多臺叢機,就執行多次)
mysql>GRANT All ON *.* TO 'backup'@'%' IDENTIFIED BY 'testbak';
mysql>flush privileges;   -- 刷新權限
mysql>select host,user from user;  --查看權限



2.2 打開主機A的my.cnf,輸入

server-id         = 1    # 主機標示,整數
log_bin            = /var/log/mysql/mysql-bin.log   #確保此文件可寫
read-only        =0  #主機,讀寫都可以
binlog-do-db    =test   #需要備份數據,多個寫多行
binlog-ignore-db=mysql #不需要備份的數據庫,多個寫多行



2.3  打開從機B的my.cnf,輸入

server-id       =2
log_bin         =/var/log/mysql/mysql-bin.log
master-host     =59.57.251.56
master-user     =backup
master-pass     =testbak
master-port     =3306
master- connect-retry=60 #如果從服務器發現主服務器斷掉,重新連接的時間差(秒)
replicate-do-db =test #只複製某個庫
replicate-ignore-db=mysql #不復制某個庫



3.  主從數據同步
有多種方法:
1) 先mysqldump導出主機A的數據test爲 test.sql
然後在從機B上建立數據庫test,mysql導入 test.sql到test庫中

2) 如果你想使用複製數據文件的方式來備份數據庫
只要在從服務器上的mysql命令行先鍵入slave stop;然後複製數據庫文件,複製好了,再在mysql命令行鍵入slave start;啓動從服務器,這樣就即備份了數據有保證了數據完整性,而且整個過程中主服務器的mysql無需停止。

4.  先重啓主機A的 mysql,再重啓從機B的mysql
If you get this error File '/var/log/mysql/mysql-bin.index' not found (Errcode: 13) you might want to try and chown -R mysql:mysql /var/log/mysql

5. 驗證
在主機A中,mysql>show master status/G;
在從機B 中,mysql>show slave status/G;
能看到大致這些內容

File: mysql-bin.000001
Position: 1374
Binlog_Do_DB: test
Binlog_Ignore_DB: mysql

 

mysql> show slave status/G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.139.77
                  Master_User: backup
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 106
               Relay_Log_File: localhost-relay-bin.000002
                Relay_Log_Pos: 251
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: test
          Replicate_Ignore_DB: mysql
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 106
              Relay_Log_Space: 410
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
1 row in set (0.00 sec)

可以在主機A中,做一些INSERT, UPDATE, DELETE 操作,看看主機B中,是否已經被修改

6.  相關注意事項
提示:如果修改了主服務器的配置,記得刪除從服務器上數據庫目錄下的master.info文件。否則從服務器使用的還是老配置,可能會導致錯誤。
----------------------------------------------------------------------

注意: 關於要複製多個數據庫時,binlog-do-db和replicate-do-db選項的設置,網上很多人說是用半角逗號分隔,經過測試,這樣的說法是錯

誤的,MySQL官方文檔也明確指出,如果要備份多個數據庫,只要重複設置相應選項就可以了。

比如:

binlog-do-db=a
binlog-do-db=b

replicate-do-db=a
replicate-do-db=b



-----------------------------------------------------------------------

補充:
在從服務器上使用show slave status/G
Slave_IO_Running, 爲No,
則說明IO_THREAD沒有啓動,請執行start slave io_thread
Slave_SQL_Running爲 No
則複製出錯,查看Last_error字段排除錯誤後執行start slave sql_thread 

查看 Slave_IO_State字段空 //複製沒有啓動
Connecting to master//沒有連接上master
Waiting for master to send event// 已經連上

補充: 可以使用LOAD DATA FROM MASTER語句來建立 slave。但有約束條件:
數據表要全部是MyISAM表,必須有SUPER權限,master的複製用戶必須具備RELOAD和SUPER權限。
在master端執行RESET MASTER清除已有的日誌變更,
此時slave端會因爲找不到master日誌無法啓動 IO_THREAD,請清空data目錄下
relay-log.info,hosname-relay-bin*等文件重新啓動mysql
中繼日誌文件默認的文件爲hostname-relay-bin.nnn和hostname-relay-bin.index。可用從服務器的--
relay- log和--relay-log-index選項修改。在從服務器中還有一個relay-log.info中繼信息文件,可用
--relay- log-info-file啓動選項修改文件名。
雙機互備則是兩個mysql同時配置爲master及slave


++主服務器上的相關命令

show master status
show slave hosts
show logs
show binlog events
purge logs to ‘log_name’
purge logs before ‘date’
reset master(老版本flush master)
set sql_log_bin=



++從服務器上的相關命令

slave start
slave stop
SLAVE STOP IO_THREAD //此線程把master段的日誌寫到本地
SLAVE start IO_THREAD
SLAVE STOP SQL_THREAD //此線程把寫到本地的日誌應用於數據庫
SLAVE start SQL_THREAD
reset slave
SET GLOBAL SQL_SLAVE_SKIP_COUNTER
load data from master
show slave status(SUPER,REPLICATION CLIENT)
CHANGE MASTER TO MASTER_HOST=, MASTER_PORT=,MASTER_USER=, MASTER_PASSWORD= // 動態改變master信息
PURGE MASTER [before 'date'] 刪除master端已同步過的日誌



++ 產生了mysql-bin.00000x文件可以刪除

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章