centos7下mysql5.6的主从复制
副标题[/!--empirenews.page--]
一、mysql主从复制介绍 一主一从 (A -> B,A为主,B为从) 一主多从 (A -> B,A -> C,B与C为从) 双主双向同步 (A -> B,B -> A,A与B同为主,互相备份) 线性级联 (A -> B -> C,A与B主主互备,C为从) 环状级联 (A -> B -> C -> A,A、B、C都为主,各节点都可写入数据) 二、实现mysql主从读写分离的方案 1、通过程序实现读写分离(判断语句关键字,去连接主从数据库) 2、通过开源的软件实现读写分离(mysql-proxy,amoeba,稳定性和功能一般,不建议生产使用) 3、独立开发DAL层软件 三、mysql主从复制原理介绍 1、在slave上执行start slave命令,开启主从复制开关,开始进行主从复制。 2、slave的I/O线程通过master上已经授权的复制用户请求master,请求指定binlog日志的指定位置。 3、master接收slave的I/O线程的请求后,其自身负责复制的I/O线程会根据slave的请求信息分批读取指定binlog日志的指定位置之后的日志信息, 然后返回给slave的I/O线程,返回信息除了binlog日志外,还有master的新binlog文件名称,以及新binlog中的下一个指定更新位置。 4、slave获取来自master上I/O线程发送的binlog日志内容,日志文件及位置点后,会将binlog内容依次写到slave自身的relay log(中继日志)文件尾部, 并将新的binlog文件名和位置记录到master-info文件中,以便下次从master读取新binlog日志时,能告诉master从新binlog的新位置读取。 5、slave的sql线程会实时检测本地relay log中I/O线程新增加的日志内容,及时把relay log文件中的内容解析成sql语句,并按解析sql语句的位置顺序执行这些sql语句。 relay-log.info中记录当前应用中继日志的文件名及位置点。 ? > vi /etc/my.cnf ??? [mysqld] server-id = 10 log-bin = /data/mysql56/data/mysql-bin ??? 2、重启主库 > service mysqld restart ??? 3、登陆主库,查看server-id > mysql -uroot -p > show variables like 'server_id'; ??? 4、主库上建立用于从库复制的账号 > grant replication slave on *.* to "rep"@"%" identified by "123456"; > flush privileges; > select user,host from mysql.user; > show grants for rep@"%"; ??? 5、对主库数据库锁表只读(当前窗口不要关掉) > flush table with read lock; ??? 查看主库状态 > show master status; ??? 6、备份主库所有数据文件 > mysqldump -uroot -p -A -B | gzip > /data/mysql_bak.$(date +%F).sql.gz ??? 7、备份完主库数据后,解锁 > unlock tables; ??? 8、把主库导出的数据迁移到从库 > vi /mysql-instance/3308/my.cnf [mysqld] server-id = 11 relay-log = /mysql-instance/3308/relay-bin relay-log-info-file = /mysql-instance/3308/relay-log.info ??? 2、重启从库 > /mysql-instance/3308/mysql restart ??? 3、登陆从库检查参数 > mysql -uroot -p -S /mysql-instance/3308/mysql.sock > show variables like 'log_bin'; > show variables like 'server_id'; ??? 4、把主库mysqldump导出的数据恢复到从库 > gzip -d /data/mysql_bak.2017-01-15.sql.gz ??? 把主库数据还原到从库 > mysql -uroot -p -S /mysql-instance/3308/mysql.sock < /data/mysql_bak.2017-01-15.sql ??? 5、登录从库,配置复制参数 CHANGE MASTER TO MASTER_HOST='127.0.0.1',MASTER_PORT=3306,MASTER_USER='rep',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=396; ??? 注意上面的MASTER_LOG_FILE和MASTER_LOG_POS是在主库中用show master status;查看的信息。 > cat /mysql-instance/3308/data/master.info (编辑:焦作站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |