環境准備
主機名 |
IP |
系統/MySQL版本 |
角色 |
node3 |
192.168.210.132 |
CentOS7.3/5.5.60 |
Master |
node2 |
192.168.210.130 |
CentOS7.3/5.5.60 |
slave |
一、master節點
1、創建需要同步的數據庫
mysql> create database zn; mysql> use zn; mysql> create table T1(id int,name varchar(20));
2、停止數據庫服務
systemctl stop mariadb.service
3、編輯my.cnf
[mysqld]
log-bin=mysql-bin-master #啟用二進制日志 server-id=1 #本機數據庫ID 標示 binlog-do-db=zn #可以被從服務器復制的庫, 二進制需要同步的數據庫名 binlog-ignore-db=mysql #不可以被從服務器復制的庫
4、重啟數據庫服務
systemctl restart mariadb.service
5、創建同步用戶並授權
MariaDB [(none)]> grant replication slave on *.* to slave@'%' identified by "123"; MariaDB [(none)]> show master status;
+-------------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------------+----------+--------------+------------------+
| mysql-bin-master.000001 | 384 | zn | mysql |
+-------------------------+----------+--------------+------------------+
MariaDB [(none)]>
MariaDB [(none)]>
MariaDB [(none)]> show binlog events\G
*************************** 1. row ***************************
Log_name: mysql-bin-master.000001
Pos: 4
Event_type: Format_desc
Server_id: 1
End_log_pos: 245
Info: Server ver: 5.5.60-MariaDB, Binlog ver: 4
*************************** 2. row ***************************
Log_name: mysql-bin-master.000001
Pos: 245
Event_type: Query
Server_id: 1
End_log_pos: 384
Info: grant replication slave on *.* to slave@'%' identified by "123"
2 rows in set (0.00 sec)
6、查看二進制文件
[root@node3 my.cnf.d]# cd /var/lib/mysql/ [root@node3 mysql]# ls[root@node3 mysql]# ls
aria_log.00000001 ibdata1 ib_logfile1 mysql-bin-master.000001 mysql.sock test
aria_log_control ib_logfile0 mysql mysql-bin-master.index performance_schema zn
7、將要同步的數據庫導出,並發送給slave節點,復制前要保證同步的數據庫一致
mysqldump -uroot -p123 zn >zn.sql #可以導出數據庫
scp zn.sql 192.168.210.130:/root
二、slave節點
1、兩台數據庫服務器mysql版本要一致
MariaDB [(none)]> show variables like '%version%'; +-------------------------+----------------------+ | Variable_name | Value | +-------------------------+----------------------+ | innodb_version | 5.5.59-MariaDB-38.11 | | protocol_version | 10 | | slave_type_conversions | | | version | 5.5.60-MariaDB | | version_comment | MariaDB Server | | version_compile_machine | x86_64 | | version_compile_os | Linux | +-------------------------+----------------------+ 7 rows in set (0.00 sec) MariaDB [(none)]>
2、測試連接到主服務器是否成功,只有復制的權限, 是看不到其他庫的
[root@node2 ~]# mysql -uslave -p123 -h 192.168.210.132 MariaDB [(none)]> MariaDB [(none)]> MariaDB [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | test | +--------------------+ 2 rows in set (0.00 sec) MariaDB [(none)]>
3、正常導入數據庫,和主數據庫服務器保持一致
[root@node2 ~]# mysql -u root MariaDB [(none)]> create database zn; Query OK, 1 row affected (0.00 sec) MariaDB [(none)]> exit [root@node2 ~]# mysql -uroot zn<zn.sql
4、從服務器沒必要開啟bin-log日志,修改從服務器配置文件:
[root@node2 ~]# systemctl stop mariadb.service [root@node2 ~]# vim /etc/my.cnf [mysqld] server-id=2 #從服務器ID號,不要和主ID相同 ,如果設置多個從服務器,每個從服務器必須有一個唯一的server-id值,必須與主服務器的以及其它從服務器的不相同。可以認為server-id值類似於IP地址:這些ID值能唯一識別復制服務器群集中的每個服務器實例。
5、停止slave服務,設置master節點ip,master_user同步用戶和密碼
[root@node2 ~]# mysql -u root MariaDB [(none)]> stop slave; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> MariaDB [(none)]> change master to master_host='192.168.210.132',master_user='slave',master_password='123'; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> MariaDB [(none)]> start slave; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]>MariaDB [(none)]> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.210.132
Master_User: slave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin-master.000001
Read_Master_Log_Pos: 384
Relay_Log_File: mariadb-relay-bin.000002
Relay_Log_Pos: 675
Relay_Master_Log_File: mysql-bin-master.000001
Slave_IO_Running: Yes #負責與主機的io通信
Slave_SQL_Running: Yes #負責自己的slave mysql進程
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 384
Relay_Log_Space: 971
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
1 row in set (0.00 sec)
MariaDB [(none)]>
三、maste節點
(1)再到主服務器上查看狀態:
[root@node3 mysql]# mysql -u root
MariaDB [(none)]> show processlist\G *************************** 1. row *************************** Id: 11 User: slave Host: node2:37878 db: NULL Command: Binlog Dump Time: 343 State: Master has sent all binlog to slave; waiting for binlog to be updated Info: NULL Progress: 0.000
(2)同步測試插入數據測試同步:
MariaDB [zn]> select * from T1; Empty set (0.00 sec)
MariaDB [zn]>
MariaDB [zn]> insert into T1 values (1,'man');
Query OK, 1 row affected (0.00 sec)
MariaDB [zn]>
MariaDB [zn]> select * from T1;
+------+------+
| id | name |
+------+------+
| 1 | man |
+------+------+
1 row in set (0.00 sec)
MariaDB [zn]>
四、slave節點驗證數據是否同步
MariaDB [zn]> show tables; +-----------------------+ | Tables_in_zn | +-----------------------+ | T1 | | wp_commentmeta | | wp_comments | | wp_links | | wp_options | | wp_postmeta | | wp_posts | | wp_term_relationships | | wp_term_taxonomy | | wp_terms | | wp_usermeta | | wp_users | +-----------------------+ 12 rows in set (0.00 sec) MariaDB [zn]> MariaDB [zn]> select * from T1; +------+------+ | id | name | +------+------+ | 1 | man | +------+------+ 1 row in set (0.01 sec) MariaDB [zn]>
五、如果遇到主從不同步修復
(1)在master節點,看一下主從bin-log的位置,然后再同步
MariaDB [(none)]> show master status;
+-------------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------------+----------+--------------+------------------+
| mysql-bin-master.000001 | 384 | zn | mysql |
+-------------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
MariaDB [(none)]> show binlog events\G
*************************** 1. row ***************************
Log_name: mysql-bin-master.000001
Pos: 4
Event_type: Format_desc
Server_id: 1
End_log_pos: 245
Info: Server ver: 5.5.60-MariaDB, Binlog ver: 4
*************************** 2. row ***************************
Log_name: mysql-bin-master.000001
Pos: 245
Event_type: Query
Server_id: 1
End_log_pos: 384
Info: grant replication slave on *.* to slave@'%' identified by "123"
2 rows in set (0.00 sec)
MariaDB [(none)]>
(2)slave節點執行MySQL命令下:
MariaDB [(none)]> stop slave; Query OK, 0 rows affected (0.01 sec) MariaDB [(none)]> MariaDB [(none)]> change master to master_log_file='mysql-bin-master.000002',master_log_pos=245; Query OK, 0 rows affected (0.01 sec) #根據上面主服務器的show master status的結果,進行從服務器的二進制數據庫記錄回歸,達到同步的效果 MariaDB [(none)]> MariaDB [(none)]> slave start ; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> show slave status\G Slave_IO_Running: Yes #如果都是yes,那代表已經在同步 Slave_SQL_Running: Yes