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-
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重複導致的問題。
需要注意的是許可權問題,預設情況下/var/lib/mysql是沒有許可權訪問和修改的,需要sudo chmod 777 /usr/lib/mysql 修改許可權後可以訪問