MySQL集羣系列1:2臺機器搭建雙主集羣


鏈接


先配置靜態IP

2臺機器mysql密碼一樣,最好在同一局域網內,最好在mysql剛安裝時就配置好,後面有數據了不好同步。

本文實現了2臺機器mysql數據同步成功;

配置my.cnf

先關閉防火牆


service iptables status

2臺機器除了server-id不同之外,配置項基本一樣(把a改爲b)

vim /etc/my.cnf

在[mysqld]部分添加如下:

#add
log-bin=master-a-bin 
server-id=1
relay-log=master-a-relay-bin
log_slave_updates=1
sync_binlog=1
#add

配置項說明

兩臺MySQL均要開啓binlog日誌功能

log-bin //[必須]啓用二進制日誌
server-id=1 //[必須]默認是1,一般取IP最後一段


兩臺MySQL的server-ID不能一樣,需將其中一臺修改爲2

log_slave_updates表示slave將複製事件寫進自己的二進制日誌

sync_binlog=1。每進行1次事務提交之後,MySQL將進行一次fsync之類的磁盤同步指令來將binlog_cache中的數據強制寫入磁盤。

修改配置後重啓mysqld

service mysqld restart


其它配置項:待查

binlog-do-db =new_test (要記錄的數據庫,多個可換行多次設置)
replicate-do-db =new_test (要複製的數據庫,多個可換行過個設置)

binlog-ignore-db=mysql //不對mysql庫進行日誌記錄操作 如下意思雷同
binlog-ignore-db=test
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema

replicate-ignore-db=test //不對test進行復制操作 如下意思雷同
replicate-ignore-db=mysql
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema


bing-address=0.0.0.0 //意思是允許所有 機器 服務器安全起見可設置爲指定的服務器IP地址

由於主從複製的時候時間必須要保持一致

iptables -I INPUT -p tcp --dport 3306 -j ACCEP

1.主服務器A123.1.1.123)創建用戶並清空日誌

mysql -uroot -p
grant replication slave on *.* to 'root'@'%' identified by 'pwd';   
flush privileges;

爲了安全,最好將“%”改爲具體的IP地址(如123.1.1.124),使該帳戶只能在指定的從服務器上使用。

flush tables with read lock;
show binary logs;
reset master;
show binary logs;
unlock tables;

記錄下 FILE 及 Position 的值,在後面進行從服務器操作的時候需要用到。



從服務器B清空日誌

show binary logs;
reset master;
show binary logs;

從服務器通過change master to命令修改設置

change master to 
master_host='123.1.1.123',
master_user='root',
master_password='pwd',
master_port=3306,
master_log_file='master-a-bin.000001',master_log_pos=106;
 
以上全部複製後修改並粘貼
show slave status \G;

在輸出的信息中:

Slave_IO_Running: No
Slave_SQL_Running: No

需要使其值爲Yes

start slave;
show slave status \G;

錯誤:
Last_IO_Error: error connecting to master '[email protected]:3306'
mysql -h 10.24.54.18 -ureplication -p
ERROR 1130 (HY000): Host '123.103.58.124' is not allowed to connect to this MySQL server
ERROR 1045 (28000): Access denied for user 'root'@'123.103.58.124' (using password: YES)
最後發現是密碼不對。






2.設置從服務器B

在“從機”B上設置複製帳號

grant replication slave on *.* to 'root'@'%' identified by 'pwd';
flush privileges;

清空“從機”日誌:

show binary logs;
reset master;
show binary logs;

在原主服務器A上通過change master to命令修改設置,可以全部複製並粘貼:

change master to 
master_host='123.103.58.124',
master_user='root',
master_password='pwd',
master_port=3306,
master_log_file='master-b-bin.000001',
master_log_pos=106;

show slave status \G;

看看

Slave_IO_Running: No
Slave_SQL_Running: No

需要使其值爲Yes

start slave;
show slave status \G;

應該有

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

設置完後重啓:service mysqld restart




如果數據不匹配

reset slave;

測試

show databases;
create database a1;
use a1;
create table t1(id int auto_increment primary key,name varchar(30));
insert into t1(name) values('appBox1');

可以發現數據庫已同步,但2臺皆可寫。

下一節將實現讀寫分離。



經測試,如果設置之前有數據不會同步,只能同步之後的
show variables like 'server_id';

其它:

RESET MASTER
刪除所有index file 中記錄的所有binlog 文件,將日誌索引文件清空,創建一個新的日誌文件,這個命令通常僅僅用於第一次用於搭建主從關係的時的主庫,

reset slave 將使slave 忘記主從複製關係的位置信息。該語句將被用於乾淨的啓動, 它刪除master.info文件和relay-log.info 文件以及所有的relay log 文件並重新啓用一個新的relaylog文件。
使用reset slave之前必須使用stop slave 命令將複製進程停止。











發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章