MySQL主從復制部署
前言
MySQL的主從復制是基於二進制日誌機制的,需開啟二進制日誌功能。在具體的配置過程中,需註意主服務器與從服務器均配置唯一ID編號,且從服務器必須設置主服務器的主機名、日誌文件名、文件位置等參數。整個過程可分為如下幾個步驟:
(1) 主服務器:開啟二進制日誌功能,設置服務器ID,並重啟MySQL服務;
(2) 在所有從服務器上設置服務器ID(唯一);
(3) 在主服務器上為不同的從服務器創建可讀取主服務器日誌文件的賬戶,或使用統一賬戶;
一、系統規劃
1、主服務器
操作系統版本: RHEL 6.6 x64
數據庫版本: MySQL 5.6
主機IP:192.168.152.129
主機名:master
數據庫名稱:
ID編號:1
2、從服務器
操作系統版本:RHEL 6.6 x64
數據庫版本:MySQL 5.6(必須保證MySQL版本一致)
主機IP:192.168.152.128
主機名:slave
數據庫名稱:
ID編號:2
註:本文為個人學習之用,使用虛擬機模擬,可作為實施參考。
二、安裝準備
1、存儲
需要根據實際情況,為源數和目標端數據庫分配足夠的可用空間
2、網絡
需要開通源端和目標端服務器的any-any的網絡端口互通性
3、NTP
需要同步源和目標主機時鐘同步機制,若為內網環境,推薦配置內網時鐘服務器
4、其他
配置靜態IP、主機名、IP與主機名綁定、防火墻(開啟端口或關閉防火墻)
5、安裝MySQL
為主服務器和從服務器安裝MySQL,須保證兩者版本一致,或者slave端版本高於master版本。
三、主服務器配置
1、準備測試數據
準備測試數據,模擬要同步對象。
mysql> create database hr;
mysql> use hr;
mysql> create table emp(id int primary key,name char(20));
mysql> insert into emp(id,name) values(1,‘tom‘);
2、設置my.cnf參數
(1)拷貝配置文件
# cp /usr/local/mysql/my.cnf /etc/my.cnf
如有必要,應註意備份配置文件,並且在生產活動懂養成備份的意識。
(2)參數設置
以下僅列出幾個必要參數:
log-bin=mysql-bin 啟用二進制日誌 server-id=1 服務器ID,可1-之間的任意整數 binlog-ignore-db=information_schema 避免同步的數據庫 binlog-ignore-db=performance_schema binlog-ignore-db=mysql binlog-do-db=hr 二進制需要同步的數據庫名
註意:在配置文件中不可使用skip-networking參數,否則從服務器將無法連接主服務器並進行數據同步
(3)重啟服務器
# service mysqld restart
3、為slave用戶添加同步專用權限
(1)創建復制賬戶並賦權
mysql> GRANT FILE ON *.* TO ‘slave_cp‘@‘192.168.1.2‘ IDENTIFIED BY ‘root‘; mysql> GRANT REPLICATION SLAVE ON *.* TO ‘slave_cp‘@‘192.168.1.2‘ IDENTIFIED BY ‘root‘; mysql> FLUSH PRIVILEGES;
(2)添加管理用戶
grant all privileges on *.* to [email protected]‘%‘ identified by ‘root‘;
(3)刷新權限
flush privileges;
四、從服務器設置
1、設置my.cnf參數
(1)備份配置文件
# cp /usr/local/mysql/my.cnf /etc/my.cnf
(2)修改參數信息
必要參數如下:
log-bin=mysql-bin server-id=2 #從服務器ID binlog-ignore-db=information_schema binlog-ignore-db=performance_schema binlog-ignore-db=mysql replicate-do-db=hr #同步的數據庫名 replicate-ignore-db=mysql #屏蔽不同步的數據庫 log-slave-updates slave-skip-errors=all slave-net-timeout=60
註:MySQL 5.6之後沒有master-user等參數,否則重啟報錯
(3)重啟服務器
# service mysqld restart
五、數據庫備份、同步
1、對數據庫進行備份
[[email protected] mysql]# /usr/local/mysql/bin/mysqldump -h localhost -uroot -proot --all-databases --lock-all-tables >/tmp/dbdump.sql [[email protected] mysql]# scp /tmp/dbdump.sql [email protected]:/tmp/ [[email protected] ~]# mysql -u root -p < /tmp/dbdump.sql
註:從服務器不需要創建要同步的數據庫,備份腳本會自動創建。
2、配置從服務器連接主服務器同步
(1)、獲取主服務器二進制日誌信息
[[email protected] mysql]# mysql -uroot -p Enter password: mysql> flush tables with read lock; --只讀鎖定 mysql> show master status; mysql> unlock tables; --解除鎖定
(2)設置從服務器同步
[[email protected] ~]# mysql -u root –p mysql> stop slaves; mysql> change master to -> master_host=‘192.168.152.129‘, -> master_user=‘slave_cp‘, -> master_password=‘root‘, -> master_log_file=‘mysql-bin.000003‘, -> master_log_pos=195; --這裏的參數取值參考查詢到的master日誌信息 mysql> start slave; mysql> show slave status \G
3、同步驗證
在master上添加數據,查看slave端的同步情況。
master節點:
[[email protected] ~]# mysql -uroot -p mysql> create database test; mysql> use test; mysql> create table users(id int primary key,name char(20)); mysql> insert into users(id,name)values(1,‘aa‘); mysql> use hr; mysql> show tables; mysql> create table bb(id int,name char(20)); mysql> insert into emp(id,name)values(2,‘bb‘);
slave節點:
[[email protected] ~]# mysql -uroot -p mysql> select * from test.users;
錯誤
1、啟動從服務器失敗
ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository
解決:
mysql> reset slave; mysql> change master to master_host=‘192.168.152.129‘, master_user=‘slave_cp‘,master_password=‘root‘,master_log_file=‘mysql-bin.000005‘, master_log_pos=610; mysql> start slave;
參考:https://zhangge.net/5091.html
參考:http://blog.csdn.net/xlgen157387/article/details/51331244/
MySQL主從復制部署