MySQL主从复制

一、准备两台MySQL服务器,并一台为主服务器(master),一台为从服务器(slave)。

二、两台服务器都装好MySQL,并都设置好远程访问。

三、配置主服务器

1.主服务器MySQL配置文件,Linux中一般是在etc/my.cnf文件中配置,在[mysqld]下添加log-bin=mysql-bin(自己设置二进制日志文件名)和server-id= 42(自己设定值,需要唯一)。

[mysqld]
...
log-bin=mysql-bin
server-id=42
...
  • 开启二进制日志
  • 配置唯一的server-id
  • 获得master二进制日志文件名及位置
  • 创建一个用于slave和master通信的用户账号

进入mysql使用show master status;语句查看二进制日志文件名和位置。

三、配置从服务器

1.从服务器MySQL配置文件,Linux中一般是在etc/my.cnf文件中配置,添加server-id= 129(自己设定值)。
2.进入mysql,执行如下:

       mysql>CHANGE MASTER TO
             >MASTER_HOST=’192.168.0.42’,       //主服务器数据库地址
             >MASTER_USER=’root’,   //用户
             >MASTER_PASSWORD=’root’,   //密码
             >MASTER_LOG_FILE=’mysql-bin.000048’,    //二进制日志文件名
             >MASTER_LOG_POS=432;     //位置值
# 不同步哪些数据库  
binlog-ignore-db = mysql  
  
# 只同步哪些数据库,除此之外,其他不同步  
binlog-do-db = test

四、开启主从复制

从服务器中进入mysql,执行start slave;开启复制。
执行show slave status; ,如果Slave_IO_Running和Slave_SQL_Running是Yes表示主从配置成功。

关闭并重新开始:
master中:reset master;
slave中:stop slave; reset slave;然后change master to ......(如果不行,reset slave后重启一下数据库)

五、测试

1.在主服务器的mysql创建数据库、创建表、添加数据。
2.在从服务器的mysql中查看数据库、查看表、查看数据。

如果数据同步,就表示MySQL主从复制成功。

优化(2018.12.20update)

MySQL的复制是基于binlog的,MySQL复制IO线程 和 SQL线程,IO线程主要是用于拉取接收Master传递过来的binlog,并将其写入到relay log,SQL线程主要负责解析relay log,并应用到slave中。

IO和SQL线程都是单线程,然后master却是多线程的,所以难免会有延迟,为了解决这个目前最新的5.6,5.7,8.0 都是在SQL线程上实现了多线程,来提升slave的并发度,减少了延迟。

启用并行复制:

MySQL 5.7.22+ 支持基于write-set的并行复制

# master
loose-binlog_transaction_dependency_tracking = WRITESET
loose-transaction_write_set_extraction = XXHASH64
binlog_transaction_dependency_history_size = 25000 #默认

#slave
slave-parallel-type = LOGICAL_CLOCK
slave-parallel-workers = 32

https://yq.aliyun.com/articles/621197

1. 基于order-commit的模式,本身并行复制已经很好了,如果并发量非常高,那么order-commit可以有很好的表现,如果并发量低,order-commit体现不了并行的优势。
但是大家想想,并发量低的MySQL,根本也不需要并行复制吧

2. 基于write-set的模式,这是目前并发度最高的并行复制了,基本可以解决大部分场景,如果并发量高,或者新搭建的slave需要快速追主库,这是最好的办法。

3. 单线程复制 + 安全参数双0,这种模式同样拥有不随的表现,一般压力均可应付。

你可能感兴趣的:(MySQL主从复制)