一、原理

1、要实现主从同步至少需要两台数据库,一台主库(master)一台从库(slave);

2、主库将数据库操作记录在本地的二进制日志(binary log)中,该过程称之为二进制日志事件;

3、从库通过IO线程读取拷贝主库的binary log到自己的中继日志文件(relay log)中;

4、最后从库通过sql 线程将relay log中的操作记录读取到自己的数据库中执行。

注:mysql的主从复制不是完全实时的,有延迟。

二、配置

主库(master):

启用二进制日志。
为master设置一个全局唯一的server_id。
创建有复制权限的用户账号 REPLIACTION SLAVE ,REPLIATION CLIENT。

1、修改master配置文件

找到mysql的配置文件,windows上是my.ini,linux上是my.cnf

vi /etc/my.cnf

加入以下配置项:

[mysqld]

#唯一id
server-id=1
#二进制日志文件
log-bin=/usr/local/mysql/data/mysql-bin
#主从同步时,忽略的数据库
binlog-ignore-db=mysql
#指定需要同步哪些数据库(默认全部数据库)
binlog-do-db=testdb

2、重启mysql服务,连接mysql

systemctl restart mysqld

mysql -uroot -p

3、检查各项配置是否生效

①查看二进制日志是否开启

mysql主从复制主机宕机后 mysql主从复制多久一次_database

②查看master信息

mysql主从复制主机宕机后 mysql主从复制多久一次_mysql_02

 ③查看master的server id

mysql主从复制主机宕机后 mysql主从复制多久一次_mysql_03

4、在master上创建有复制权限的用户

本地的mysql可以被: 用户copyUser,密码123456,ip为129.204.69.233的访问

grant replication slave,replication client on *.* to copyUser@'129.204.69.233' identified by '123456';

 刷新权限

flush privileges;

从库(slave):

启动中继日志。
为slave设置一个全局唯一的server id。
使用有复制权限的用户账号连接至master,并启动复制线程。

1、修改slave配置文件

vi /etc/my.cnf

添加以下配置项:

[mysqld]

#唯一id
server-id=2
#中继日志文件
relay-log=/usr/local/mysql/data/relay-log
#指定要复制的数据库
replicate-do-db=testdb

2、重启mysql服务,连接mysql

systemctl restart mysqld

mysql -uroot -p

3、检查各项配置是否生效

①检查中继日志是否开启

mysql主从复制主机宕机后 mysql主从复制多久一次_服务器_04

② 查看slave的server id

mysql主从复制主机宕机后 mysql主从复制多久一次_mysql主从复制主机宕机后_05

3、设置主从关系

master_host:主库的ip地址,

master_port:主库的端口,

master_user:在master上创建的有复制权限的用户(上面的copyUser)

master_password:复制权限用户的密码

master_log_file:主库中二进制日志文件名,show master status查看

master_log_pos:show master status中position字段值

CHANGE MASTER TO MASTER_HOST='150.158.42.158',MASTER_PORT=3306,MASTER_USER='copyUser',MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=596;

 4、启动slave

start slave;

5、查看slave运行状态

show slave status\G

如下图所示:

必须保证以下两个为yes:
             Slave_IO_Running: yes
            Slave_SQL_Running: yes

mysql主从复制主机宕机后 mysql主从复制多久一次_mysql主从复制主机宕机后_06

 

三、测试

1、在master上创建testdb数据库

create database testdb;

2、在slave上查看数据库

show databases;

 

mysql主从复制主机宕机后 mysql主从复制多久一次_数据库_07

如上图在master上创建的数据库,在slave上也有,即主从复制基本ok。