1. 程式人生 > >兩個Mysql資料庫主從庫單向同步

兩個Mysql資料庫主從庫單向同步

鄙人一個技術菜鳥,但是也有一個渴望成功夢想,所以想在新的一年裡,在技術方面有所提升,閒暇之餘,我將寫點部落格,對自己學到的東東加以鞏固,但技術功底有限,內容可能比較膚淺……

很久之前安排給我同一個戰壕的同事讓搞一個mysql主從庫備份的,但是遺憾的是都2016年了,這麼一個東東都沒有落實,汗吶!!!你如果看到我的這篇部落格的話,沒錯,我就是在說你吶。言歸正傳……
一、使用的環境(只是做了測試)
window10-64位+mysql5.6.24

1.設定兩臺機器能夠互相通訊
我是在同一區域網測試的,如果親是要在兩臺外網服務中測試,具體的網路配置請自行查閱,比如開放埠,防火牆等等,以下內容,為個人所在區域網的設定進行……
主庫機器ip:192.168.1.118
從庫機器ip:192.168.1.116
2.在主、從機器上各新增同步賬戶

,操作如下:

  • 主庫機器

//已命令列的形式登入mysql
開始-Mysql
//Enter password:(輸入的Mysql密碼)
看到這麼介面,說明Mysql以命令列的形式登入成功
//建立賬戶並授權
create user ‘新賬戶名’@’host’ identified by ‘密碼’;
grant all privileges on 資料庫名.表名 to ‘賬戶名’@’%’
說明:新賬戶名為建立的使用者名稱,我用backAdmin;密碼你懂得;host是指定該賬戶可以在那個主機上登入,如果是本地使用者可以localhost,如果是想讓該使用者可以在任意遠端主機登入,可以使用萬用字元%;

參考語句如下:create user ‘backAdmin’@’%’ identified by ‘123456’;

資料庫名.表名是指將該資料中的某個表的某個許可權,授權給某個使用者,此處為了測試方便,我將該資料庫的所有表的所有的操作許可權授予新建的賬戶,gzante.*表示資料庫gzante的所有表,如果表示多有庫的所有表,則用*.*,這裡的gzante也是要同步的庫;

參考語句如下:grant all privileges on gzante.* to ‘backAdmin’@’%’

  • 從庫機器

//已命令列的形式登入mysql
開始-Mysql
//Enter password:(輸入的Mysql密碼)
看到這麼介面,說明Mysql以命令列的形式登入成功
//建立賬戶並授權
create user ‘新賬戶名’@’host’ identified by ‘密碼’;

在從庫機器上,先不要提前建立與要備份的主庫同名數據庫,我是提前在從庫機器上建立了一個同名的DBante資料,導致從庫的相關設定好了之後,執行start slave的時候,會出現錯誤,

首先關於my.ini配置檔案簡單說下,在mysql5.6之前的版本中,my.ini檔案在mysql的安裝D:\MySQL\MySQL Server 5.6\my.ini目錄下,而mysql5.6的my.ini檔案被放到了“D:\ProgramData\MySQL\MySQL Server 5.6\my.ini”中,ProgramData資料夾是存放程式資料的資料夾,如果在安裝的時候沒有修改的話,具體根據自己的配置情況。切記並非有些網友提到的D:\MySQL\MySQL\my-default.ini
本人是安裝到D盤下面
在[mysqld]下新增配置檔案:
server-id = 1921680118 #必須明確指定一個唯一的伺服器Id,我是用了ip地址192.168.0.118,沒有加點
log-bin=mysql-bin #是指定二進位制日誌檔案的名稱
relay-log=relay-bin #帶研究確認
relay-log-index=relay-bin-index #帶研究確認
binlog-do-db=gzante #指定要同步的資料庫
另外需說明,關於配置my.ini檔案中使用的key,如server-id,log-bin等等,連線符到底是下劃線_,還是短橫線-,需要親們自己去查閱資料,有的網友用的是server_id,log_in。並且my.ini原始檔案中也在混用,一會下劃線,一會短橫線。
儲存檔案,重新啟動mysql服務,用命令檢視配置是否成功,show master status;

在[mysqld]下新增配置檔案:
server-id = 1921680116 #必須明確指定一個唯一的伺服器Id,我是用了ip地址192.168.0.116,沒有加點
log-bin=mysql-bin #是指定二進位制日誌檔案的名稱
log_slave_updates = 1 #日誌可以更新
read_only=1 #只讀
replicate-do-db=gzante #指定要複製的資料庫
儲存檔案,重新啟動mysql服務,用命令檢視配置是否成功,show slave status\G;

5.在備份伺服器上啟動同步功能
mysql>
change master to master_host=’192.168.0.118’,master_user=’backAdmin’,
master_password=’123456’, master_log_file=’mysql-bin.000001’,master_log_pos=0;

執行後,可以通過show slave status\G;命令列檢查同步功能是否正在執行我們可以看到slave_io_state 為空,slave_io_running、slave_sql_running都顯示為NO,說明備份伺服器配置成功,但是沒有啟動。
沒有執行啟動slave之前
mysql>start slave;
這裡寫圖片描述
執行後,可以通過再通過show slave status\G;命令列檢查同步功能是否正在執行我們可以看到slave_io_state:Waiting for master to send event
slave_io_running:yes
slave_sql_running:yes
說明備份伺服器配置成功,並且同步功能已啟動。這時你可以修改主庫,重新整理從庫就會發現奇蹟出現。

前面我還提到了一個可能出現的錯誤,這裡我再說下,有時候你可能會發現slave_io_running:yes
slave_sql_running:no的情況,如下圖
這裡寫圖片描述
這個錯誤很明顯,備份庫名稱已存在,很簡單,刪除你從庫機器上的同名數據,再次執行這句命令,將會自動建立備份庫。
mysql>
change master to master_host=’192.168.0.118’,master_user=’backAdmin’,
master_password=’123456’, master_log_file=’mysql-bin.000001’,master_log_pos=0;