Mysql 主從設定

來源:互聯網
上載者:User

標籤:

一、準備伺服器

由於MySQL不同版本之間的(二進位日誌)binlog格式可能會不一樣,因此最好的搭配組合是Master的MySQL版本和Slave的版本相同或者更低,Master的版本肯定不能高於Slave版本。

我測試設定成功的伺服器:
主伺服器(以下簡稱Master)的版本是3.23.58,
從伺服器(以下簡稱Slave)的版本是5.0.91,這個跨度應該算比較大了吧。

Master主機名稱為:A(IP:192.168.0.1),
Slave  主機名稱為:B(IP:192.168.0.2),
2個MySQL的basedir目錄都是/usr/local/mysql,datadir都是:/var/lib/mysql/ 。
預設安裝的就如此。

二、設定同步Master 伺服器

1、設定my.cnf

# cp /usr/share/doc/mysql-server-3.23.58/my-large.cnf /etc/my.cnf
對於my-large.cnf這個檔案個人覺得只是mysql大型資料庫配置的demo檔案,copy該目錄下的my-small.cnf應該是一樣的;
因為我伺服器配置比較高,看large裡面參數多,省事就選他用了。
修改 my.cnf 檔案:

log-bin = mysql-bin        #指定產生binlog檔案名稱
server-id       = 1            #此id不可重複
binlog-do-db = news        #需要備份的資料庫名,如果備份多個資料庫,重複設定這個選項即可
binlog-ignore-db = mysql  #不需要同步的資料庫名,可以設定多條
binlog-ignore-db = test     #不需要同步的資料庫名,可以設定多條
log-slave-updates            #這個參數一定要加上,否則不會給更新的記錄些到二進位檔案裡
slave-skip-errors            #是跳過錯誤,繼續執行複製操作

2、建立使用者
$mysql -u root -p    #進入mysql
mysql>CREATE USER TO ‘backup‘@‘%‘ DENTIFIED BY ’backuppass’;   #建立備份使用者backup
mysql>GRANT FILE,SELECT,RELOAD ON *.* TO ‘backup‘@‘%‘;      #設定許可權
因為mysql版本太老了,所以不支援REPLICATION SLAVE,否則用下面的:
mysql>GRANT FILE,SELECT,RELOAD,REPLICATION SLAVE ON *.* TO ‘backup‘@‘%‘;        #設定許可權

mysql>FLUSH PRIVILEGES ;

3、在Replication完成前,Master跟Slave的資料內容必須一致,故在備份匯出資料庫前先Lock成唯讀。
mysql > FLUSH TABLES WITH READ LOCK;

4、需要同步的news資料庫匯出,可以使用mysqldump或者是tar的方式壓縮起來。

如果用mysqldump的方式:
$mysqldump -u root -p news > news.sql       #匯出資料庫成檔案news.sql

因為2個資料版本不一樣,且儲存編碼不一樣,我用的上面的方法。

如果用壓縮方式:
cd /var/lib/mysql/  #mysql庫目錄
tar zcvf news.tar.gz news

5、匯出資料庫後,解除唯讀:

mysql>UNLOCK TABLES;

6、 重啟mysql,前面設定的my.cnf生效;重啟後,在Master伺服器上的add、update、delete等操作都會記錄在binlog檔案中

$/etc/init.d/mysql restart   或者 service mysqld restart

7、記錄複製啟動斷點
執行以下命令,記錄從伺服器開始啟動複製的斷點,包括日誌名和位移量。
  mysql> SHOW MASTER STATUS;
比如:
  mysql> show master status\G
     File: mysql-bin.001
     Position: 73
     Binlog_Do_DB:
                 Binlog_Ignore_DB:
記錄檔名是:mysql-bin.001
位移量是:73
注意,等會從伺服器將從這個位置開始複製。需要記錄下這2個地方。

二、設定同步Slave伺服器

1.   匯入資料到從伺服器器:
我用的是$mysql -u root -p news < news.sql

2、如果是用壓縮的辦法:
傳輸拿到主庫資料包、解包
# cd /var/lib/mysql/
# scp 192.168.0.1:/var/lib/mysql/news.tar.gz .
# tar zxvf var.tar.gz
查看修改news檔案夾許可權
# chown -R mysql:mysql news

3, 設定同步Slave的my.cnf
server-id       = 2 
# log-bin=mysql-bin    #我沒有用到,只需要從A同步到B即可
master-host     =   192.168.0.1
master-user     =   backup
master-password =  backuppass
master-port     =  3306
#上面是前面添加的使用者名稱和密碼,下面3行是新版本的sql內建的表。
replicate-ignore-db = mysql       #忽略掉的資料庫
replicate-ignore-db = test           #忽略掉的資料庫
replicate-ignore-db = information_schema  #忽略掉的資料庫
replicate-do-db = news  #需要備份的資料庫名
replicate_do_table = news.user   #需要備份的資料表名
master-connect-retry=60  #如果從伺服器發現主伺服器斷掉,重新串連的時間差(秒)
#log-slave-updates  #我沒有用到,如果從伺服器也要更新記錄到二進位檔案裡
slave-skip-errors  #是跳過錯誤,繼續執行複製操作

設定完成後,首先檢查/var/lib/mysql/目錄下是否有mysql的啟動關閉日誌,類似的為*.info,localhost*,ib*之類的日誌 資訊。如果有全部刪除(提示:先停止mysql服務,再刪除),然後啟動mysql服務。

4、驗證串連MASTER
# mysql -h192.168.0.1 -ubackup -pbackuppass
 主機IP、使用者名稱、密碼前面不能帶有空格

5、設定Master伺服器資訊,讓Slave知道Master的位置

以往的方式是直接在my.cnf中設定master的相關訊息;但是,這樣的方式已經改了,必須使用在 mysql下執行【CHANGE MASTER TO】的指令

在my.cnf中master是錯誤的

master-host     =   192.168.0.1
master-user     =   backup
master-password =  backuppass
master-port     =  3306


slave stop;  
MySQL> CHANGE MASTER TO 
-> MASTER_HOST=‘192.168.0.1‘,  
-> MASTER_USER=‘backup‘,  
-> MASTER_PASSWORD=‘backuppass‘,  
-> MASTER_LOG_FILE=‘mysql-bin.001‘,  
-> MASTER_LOG_POS=73;  
slave start; 

6,檢查同步是否成功
用show slave status;看一下從伺服器的同步情況
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
如果都是yes,那代表已經在同步 。

Seconds_Behind_Master是否為0,0就是已經同步了

出現Slave_IO_Running:NO,可能需要開啟:
slave stop;  
SLAVE start IO_THREAD
slave start; 

另外,出現Slave_IO_Running:NO還有一個原因是slave上沒有許可權讀master上的資料。

Mysql 主從設定

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.