MySQL雙主互備即兩臺MySQL服務器同時是主服務器,而同時又是對方的從服務器,這樣可以分擔主服務器的一部分寫請求,因爲如果是單主模型的話數據寫入只能寫入在一臺MySQL服務器,而雙主模型則可同時寫在兩臺服務器上,有效加快了寫入的速度,而且還能提供數據的備份功能。
環境如下:
server1:CentOS 6.5 x86_64 mariadb 10.0.10 IP:192.168.10.204
server2:CentOS 6.5 x86_64 mariadb 10.0.10 IP:192.168.10.205
一:服務器的my.cnf配置:
Server1:my.cnf全部配置如下:
[root@node4 ~]# grep -v "#" /etc/mysql/my.cnf
[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld]
port = 3306
socket = /tmp/mysql.sock
skip-external-locking
key_buffer_size = 256M
max_allowed_packet = 1M
table_open_cache = 256
sort_buffer_size = 1M
read_buffer_size = 1M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size= 16M
thread_concurrency = 4
datadir = /data/mydata
innodb_file_per_table = ON #每一條事物完成後就寫入二進制
log-bin=/data/binlogs/master-bin #二進制日誌目錄
binlog_format=mixed
server-id = 100 #兩臺服務器的server-id絕不可以相同
auto_increment_increment=2 # 定義每次增長間隔爲2即步長,起始值爲1步長爲2表示每次增長就加2,1、3、5、7、9,用於和從服務器區分值
auto_increment_offset=1 # 定義主鍵自動增長起始值
skip_slave_start #跳過slave備份線程,即服務啓東時候不自動打開
relay_log = /data/relaylogs/relay-bin #中繼日誌路徑
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
no-auto-rehash
[myisamchk]
key_buffer_size = 128M
sort_buffer_size = 128M
read_buffer = 2M
write_buffer = 2M
[mysqlhotcopy]
interactive-timeou
server2 my.cnf全部配置:
[root@node5 ~]# grep -v "#" /etc/mysql/my.cnf
[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld]
port = 3306
socket = /tmp/mysql.sock
skip-external-locking
key_buffer_size = 256M
max_allowed_packet = 1M
table_open_cache = 256
sort_buffer_size = 1M
read_buffer_size = 1M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size= 16M
thread_concurrency = 4
innodb_file_per_table = ON
datadir = /data/mydata
log-bin=/data/binlogs/master-bin
binlog_format=mixed
server-id = 4
auto_increment_increment=2
auto_increment_offset=2
skip_slave_start
relay_log = /data/relaylogs/relay-bin
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
no-auto-rehash
[myisamchk]
key_buffer_size = 128M
sort_buffer_size = 128M
read_buffer = 2M
write_buffer = 2M
[mysqlhotcopy]
interactive-timeout
然後啓動mysqld服務
二:授權複製並啓動複製:
1、server1:
mysql> grant replication slave,file on *.* to 'tom'@'192.168.%.%' identified by '123456';
mysql> flush privileges;
2、server2:
mysql> grant replication slave,file on *.* to 'tom'@'192.168.%.%' identified by '123456';
mysql> flush privileges;
3、在各個server指向對方當主服務器:
server1:
mysql> CHANGE MASTER TO MASTER_HOST='192.168.10.205',MASTER_USER='tom',MASTER_PASSWORD='123456',MASTER_LOG_FILE='master-bin.000004',MASTER_LOG_POS=1160;
注:MASTER_LOG_FILE='master-bin.000004',MASTER_LOG_POS=1160; 是對方主服務器192.168.10.205查看show master status得知
server2:
mysql> CHANGE MASTER TO MASTER_HOST='192.168.10.204',MASTER_USER='tom',MASTER_PASSWORD='123456',MASTER_LOG_FILE='master-bin.000003',MASTER_LOG_POS=526;
注:MASTER_LOG_FILE='master-bin.000004',MASTER_LOG_POS=1160; 是對方主服務器192.168.10.204查看show master status得知
4、啓動slave線程:
server1:
mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)
server2:
mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)
5、查看狀態:
serever1:
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.10.205
Master_User: tom
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-bin.000004
Read_Master_Log_Pos: 1160
Relay_Log_File: relay-bin.000002
Relay_Log_Pos: 536
Relay_Master_Log_File: master-bin.000004
Slave_IO_Running: Yes #
Slave_SQL_Running: Yes #此兩個線程一定要啓動
server2:
mysql>show slave status\G
***************************1. row ***************************
Slave_IO_State:Waiting for master to send event
Master_Host:192.168.10.204
Master_User:tom
Master_Port:3306
Connect_Retry:60
Master_Log_File:master-bin.000003
Read_Master_Log_Pos:843
Relay_Log_File:relay-bin.000002
Relay_Log_Pos:853
Relay_Master_Log_File:master-bin.000003
Slave_IO_Running:Yes
Slave_SQL_Running:Yes
6、在任意一個server創建庫和表並插入內容差可能能否同步:
server1:
mysql> create database linux;
Query OK, 1 row affected (0.00 sec)
server2:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| linux |
| mysql |
| performance_schema |
| test |
+--------------------+
5 rows in set (0.04 sec)
mysql> use linux;
Database changed
mysql> create table t1 (id int);
Query OK, 0 rows affected (0.16 sec)
mysql> insert into t1 values (1),(2),(3);
Query OK, 3 rows affected (0.08 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> select * from t1;
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
+------+
3 rows in set (0.00 sec)
server1:
mysql> insert into t1 values (4),(5),(6);
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> select * from t1;
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
+------+
6 rows in set (0.00 sec)