一、主从复制原理
主服务器开启二进制日志功能后,主服务器的的变更就会记录到二进制日志中。从服务器把主服务器的二进制日志读到本地的中继日志,然后利用中继日志重做变更,以此保证主从两个环境变更一致。
二、搭建环境
vmware虚拟机,centos7,mariadb 10.2.14
主服务器IP:192.168.160.7
从服务器IP:192.168.160.8
三、搭建步骤
1、安装mariadb
分别在主从两个服务器上安装好mariadb,和安装单实例数据库没有差别,安装步骤直接略过。我的实验环境是直接通过虚拟机克隆获得的。
2、配置主服务器配置文件
编辑my.cnf文件:vi /etc/mysql/my.cnf
开启二进制日志:log-bin=mysql-bin
添加不同步数据的数据库:
binlog-ignore-db=information_schema
binlog-ignore-db=mysql
binlog-ignore-db=performance_schema
(也可以指定同步的数据,本文两种配置都配置:binlog-do-db=hse_aq )
修改server_id:server-id = 1
然后保存退出配置文件,完成配置
3、配置从服务器配置文件
编辑my.cnf文件:vi /etc/mysql/my.cnf
开启中继日志:relay-log = /app/data/relay-bin
限制从服务器数据库只读(超级权限用户依然能修改从库的数据):read_only = 1
修改server_id:server-id = 2
然后保存退出配置文件,完成配置
4、在主服务器上创建复制用户
登录mariadb,创建复制账户:GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'marry'@'192.168.160.8' IDENTIFIED BY '123456';
查看主库二进制日志状态,以便在从服务器选择复制开始位置:show master status;
5、在从服务器上访问主服务器
在从服务器上登录mariadb,使用复制账户marry访问主服务器,其中MASTER_LOG_FILE是主服务器当前使用的二进制日志,MASTER_LOG_POS是日志的开始位置:
CHANGE MASTER TO MASTER_HOST='192.168.160.7',MASTER_PORT=3306,MASTER_USER='marry',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000007',MASTER_LOG_POS=7000;
查看同步状态:SHOW SLAVE STATUS\G
MariaDB [(none)]> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
Slave_IO_State:
Master_Host: 192.168.160.7
Master_User: marry
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000007
Read_Master_Log_Pos: 7000
Relay_Log_File: relay-bin.000001
Relay_Log_Pos: 4
Relay_Master_Log_File: mysql-bin.000007
Slave_IO_Running: No
Slave_SQL_Running: No
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: 7000
Relay_Log_Space: 256
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: NULL
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
Master_SSL_Crl:
Master_SSL_Crlpath:
Using_Gtid: No
Gtid_IO_Pos:
Replicate_Do_Domain_Ids:
Replicate_Ignore_Domain_Ids:
Parallel_Mode: conservative
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State:
1 row in set (0.00 sec)
从上面的内容可以看到
Slave_IO_Running: No
Slave_SQL_Running: No
说明复制过程还没有开始,在从服务器上启动复制:START SLAVE;
再查看同步状态:SHOW SLAVE STATUS\G
MariaDB [(none)]> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.160.7
Master_User: marry
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000007
Read_Master_Log_Pos: 7000
Relay_Log_File: relay-bin.000002
Relay_Log_Pos: 555
Relay_Master_Log_File: mysql-bin.000007
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
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: 7000
Relay_Log_Space: 858
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
Master_SSL_Crl:
Master_SSL_Crlpath:
Using_Gtid: No
Gtid_IO_Pos:
Replicate_Do_Domain_Ids:
Replicate_Ignore_Domain_Ids:
Parallel_Mode: conservative
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
1 row in set (0.00 sec)
两个状态都已经变成yes,说明同步已经开始。
6、验证
在主服务器上新建数据库(如果主服务器配置了binlog-do-db参数,新建数据库不会同步到从服务器)、新建表、新增数据、修改数据、删除数据、删除表等操作,都能反应到从库,说明环境搭建成功。
7、备注
如果在从服务器上访问主服务器出现问题,可以用stop slave、reset slave命令重新配置。
还有很多配置参数在本次搭建没有配置,可以一点点配置测试。