环境准备
主机名 |
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
来源:oschina
链接:https://my.oschina.net/u/4392232/blog/3507971