本次搭建的是异步主从复制,当然还有半同步复制
    (1)回顾
    MySQL主从复制的原理之前都说了,大致来说就是主库接受增删改操作,把增删改操作binlog写入本地文件,然后从库发送请求拉去binlog,接着在从库上面重做执行一遍binlog的操作,就可以还原一样的数据了。
    那么搭建的时候肯定是需要两台机器的,一台机器放主库,另一台从库,首先要确保主库和从库的server-id是不同的,这个是必然的,其次是主库必须打开binlog功能,必须打开binlog的功能主库才会写binlog到本地磁盘,接着按如下步骤在主库上执行一通操作。

    (2)操作: 主数据库 192.168.161.132 从数据库 192.168.161.131
    首先在主库创建一个用于主从复制的账号,
    create user ‘backup_user’@’192.168.161.%’ identified by ‘backup_123’;
    grant replication slave on . to ‘backup_user’@’192.168.161.%’;
    flush privileges;
    接着考虑一个问题,假设主库都跑了一段时间了,现在要挂一个从库,那从库总不能把主库从0开始的所有binlog都拉一遍,这是不对的,此时就在凌晨时候,在公司里直接让系统对外不可用,说是维护状态,然后对主库和从库做一个数据备份和导入。
    可以使用mysqldump命令工具,把主库在这个时刻的数据做一个全量备份,但是此时一定不能运行系统操作主库,主库数据此时是不能变动的,进入mysql/bin目录下
    ./mysqldump —single-transaction -uroot -p123456 —master-data=2 -A > backup.sql

    用上述命令就可以对主库所有的数据都做一个备份了,备份会以SQL语句的方式进入backup.sql文件中,只要执行这个backup.sql文件,就可以恢复出来和主库一样的数据。至于上面的命令—master-data=2 ,意思是说备份SQL文件里,要记录一下此时主库的binlog文件和position号, 这是为主从复制做准备的,接着可以通过scp建backup.sql文件拷贝到从库服务器上,接着在从库上执行如下命令
    mysql -uroot -p < backup.sql
    把backup.sql文件里的语句都执行一遍,这就相当于把主库所有的数据都还原到从库上去了,主库上所有的database,table以及数据,在从库里全部都有了。
    接着执行如下命令:
    CHANGE MASTER TO MASTER_HOST=’192.168.161.132’, MASTER_USER=’backup_user’,MASTER_PASSWORD=’backup_123’,MASTER_LOG_FILE=’mysql-bin.000003’, MASTER_LOG_POS=154;
    接着在执行一个开始进行主从复制的命令,start slave,再用show slave status\G 查看一下主从复制的状态,主要看Slave_IO_RunningSlave_SQL_Running都是YES就说明一切正常,开始主从复制了。接着就可以在主库插入一条数据,然后在从库查询这条数据,只要从库能查到这条数据,就说明主从复制已经成功了。

    (3)总结
    这仅仅是最简单的一种主从复制,就是异步复制,就是之前讲过的那种原理,从库异步拉取binlog来同步,所以肯定会出现短暂的主从不一致的问题,比如主库刚插入数据,结果在从库立即查询,可能是查不到的。

    主从复制搭建注意点:
    https://zhjwpku.com/2018/01/14/mysql-master-slave-replication-practice.html