1. 程式人生 > >ubuntu環境下配置mysql主從複製

ubuntu環境下配置mysql主從複製

我是在VMWare虛擬機器的Ubuntu 16.04上進行的測試,步驟如下

1、依次下載安裝MySQL,我使用的是 sudo apt-get install mysql-server mysql-client線上安裝 

2、在主從的終端分別輸入 

vim /etc/mysql/mysql.conf.d/mysqld.cnf

開啟配置檔案,註釋掉bind-address,用來允許遠端訪問資料庫。

並在主伺服器的裡新增以下程式碼。

server-id = 1 #server-id 伺服器唯一標識

log_bin = master-bin #log_bin 啟動MySQL二進位制日誌

log_bin_index = master-

bin.index

binlog_do_db = myslave #binlog_do_db 指定記錄二進位制日誌的資料庫

binlog_ignore_db = mysql #binlog_ignore_db 指定不記錄二進位制日誌的資料庫

 

在從伺服器的資料庫配置檔案里加入以下程式碼



3、允許mysql的遠端訪問(許可權可以根據自己配置)

例如:

允許賬戶為root,密碼為wangcbin的使用者,從192.168.110.*的IP範圍 遠端訪問A主mysql,如果想任何機器都能連上主機把IP改成%即可

mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.110.*' IDENTIFIED BY 'wangcbin' WITH GRANT OPTION;
生效。該操作很重要!
mysql>FLUSH PRIVILEGES;

4、分別重啟mysql服務 

service mysql restart

5、登入主伺服器上的mysql並檢視狀態資訊

show master status


記錄下file和position欄位的值後面會用到

6、登入從伺服器上的mysql並輸入一下程式碼,用於從伺服器連線上master伺服器

change master to master_host='192.168.178.128',master_port=3306,master_user='root',master_password='wangcbin',master_log_file='master-bin.000001',master_log_pos=1048;

(master_host對應主伺服器的IP地址,master_port對應主伺服器的埠,master_user對應主伺服器的賬號,master_password對應主伺服器的密碼master_log_file對應show master status顯示的File列:master-bin.000001,master_log_pos對應Position列:1048,否則有可能出現同步失敗。)

master_user和master_password是第三步配置的賬號和密碼

7、在從伺服器上面啟動同步 start  slave 檢視從伺服器狀態  show slave status\G;



上面兩個都為Yes表示同步成功,如果是slave_io_running no了,那麼就我個人看有三種情況,一個是網路有問題,連線不上,第二個是有可能my.cnf有問題,檢視server-id是否已經更改,最後一個是mysql的uuid是否和主伺服器的不一樣,具體問題通過檢視mysql的log日誌。

mysql的目錄結構:

/usr/bin                 客戶端程式和指令碼
/usr/sbin                mysqld 伺服器
/var/lib/mysql           日誌檔案,資料庫  [重點要知道這個]
/usr/share/doc/packages  文件
/usr/include/mysql       包含( 頭) 檔案
/usr/lib/mysql           庫
/usr/share/mysql         錯誤訊息和字符集檔案
/usr/share/sql-bench     基準程式

我遇見的問題,通過檢視日誌檔案:

Slave I/O for channel '': Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work. Error_code: 1593

發現原來是uuid和主伺服器的uuid重複了,Mysql的一個配置檔案auto.cnf裡面記錄了mysql伺服器的uuid。(auto.cnf的地址在庫下面/var/lib/mysql 

因為我的從伺服器是通過主伺服器克隆過來的,所以mysql的uuid重複導致的問題。


server_uuid:伺服器身份ID。在第一次啟動Mysql時,會自動生成一個server_uuid並寫入到資料目錄下auto.cnf檔案裡,然後經過修改auto.cnf檔案中的server-uuid,重啟mysql伺服器,再檢視mysql從節點的狀態,終於成功了。

需要注意的是許可權問題,預設情況下/var/lib/mysql是沒有許可權訪問和修改的,需要sudo chmod 777 /usr/lib/mysql 修改許可權後可以訪問