首先保证需要有两台或以上的mysql服务器

楼主使用的是centos7、mysql5.7

主服务器

1.主服务器查询my.cnf文件在哪里(windows是my.ini)

[root@iZ2ze6jtdc34fsqky9qc24Z ~]# find / -name my.cnf
/etc/my.cnf

2.修改my.cnf文件(如果mysql处于运行状态需停止,改完my.cnf在启动)

[mysqld]
#server-id需要保证唯一性 不可与其他从服务器相同 如果为0会拒绝所有从服务器连接
server-id=1
log_bin=master-bin
#binlog的索引文件 可以不配置 默认会根据上面配置增加index后缀
log-bin-index=master-bin.index
#需要同步的数据库
#binlog-do-db=test
#不需要同步的数据库
binlog-ignore-db=mysql
binlog-ignore-db=test
binlog-ignore-db=information_schema
#为每个session分配的内存,在事务过程中用来存储二进制日志的缓存(可以不配置)
#binlog_cache_size=1M
# 主从复制的格式(mixed,statement,row,默认格式是statement)
# binlog_format=mixed
# # 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
expire_logs_days=7

1)statement:语句级,binlog 会记录每次一执行写操作的语句。相对 row 模式节省空间,但是可能产生不一致性,比如“update tt set create_date=now()”,如果用 binlog 日志 进行恢复,由于执行时间不同可能产生的数据就不同。

优点:节省空间。
缺点:有可能造成数据不一致。
2)row:行级, binlog 会记录每次操作后每行记录的变化。

优点:保持数据的绝对一致性。因为不管 sql 是什么,引用了什么函数,他只记录 执行后的效果。缺点:占用较大空间。

3)mixed:statement 的升级版,一定程度上解决了,因为一些情况而造成的 statement 模式不一致问题,默认还是 statement,在某些情况下譬如:当函数中包含 UUID() 时;包含 AUTO_INCREMENT 字段的表被更新时;执行 INSERT DELAYED 语句时;用 UDF 时;会按照 ROW 的方式进行处理

3.改完以后进入mysql创建一个用户用来给从库复制用(不懂的自行百度或查看我之前的文章),然后运行以下命令查看二进制信息

mysql> show master status;
+-------------------+----------+--------------+-------------------------------+-------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB              | Executed_Gtid_Set |
+-------------------+----------+--------------+-------------------------------+-------------------+
| master-bin.000001 |      154 |              | mysql,test,information_schema |                   |
+-------------------+----------+--------------+-------------------------------+-------------------+
1 row in set (0.10 sec)

从服务器

1.修改从服务器的my.cnf(如果mysql处于运行状态需停止,改完my.cnf在启动)

[mysqld]
server-id=3

2.进入mysql运行以下命令

mysql> change master to
    -> master_host='192.168.0.109',     //主服务器的地址
    -> master_port=3306,                //主服务器端口
    -> master_user='test1',             //主服务器账号
    -> master_password='Test@0320',     //主服务器密码
    -> master_log_file='master-bin.000001', //主服务器二进制文件
    -> master_log_pos=154;                  //主服务器position行数
Query OK, 0 rows affected, 2 warnings (0.01 sec)

3.运行成功代表已经设置完成,运行show slave status \G;命令查看是否正常

Slave_IO_Running: Yes     //从主库读取二进制文件到从库的中继日志 
Slave_SQL_Running: Yes    //将中继日志中数据转化为sql并运行

4.开启同步命令

start slave 开启
 stop slave 关闭
 reset slave和 reset slave all  重配,重置mysql主从同步的命令
---reset slave 仅清理master.info 和 relay-log.info 文件
---删除所有的relay log 文件,重启用一个新的relay log 文件。
---重置 MASTER_DELAY  复制延迟间隔为:0
---不清理内存里的同步复制配置信息
---不重置 gtid_executed or gtid_purged 参数值
 reset slave all 功能和上面一样但是会立即清理内存里的同步配置信息