0
点赞
收藏
分享

微信扫一扫

《高性能mysql》之复制(第十章)


①复制概述:


 -- 概念:让一台服务器的数据与其他服务器保持同步。


          复制通常不会增加主库的开销,主要是启用二进制日志带来的开销,每个备库也会对主库增加一些负载(例如网络I/O开销)


          一主库多备库,造成一些浪费,含大量不必要重复



 -- 复制解决的问题:数据分布、负载均衡(通过mysql复制可将读操作分布到多个服务器上)、备份(但不是真的备份技术)、高可用性和故障切换、Mysql升级测试。


 -- 复制如何工作: 主库数据 更新到 二进制日志文件 -> 备库通过I/O线程 复制主库日志并写入中继日志 -> 备库读取中继日志并 重放 数据库


           

《高性能mysql》之复制(第十章)_分布式


 


②配置复制:


-- 创建账号:


GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TOrepl@'119.29.155.%' IDENTIFIED BY 'password';



《高性能mysql》之复制(第十章)_分布式_02



 注:以上创建一 账号repl( 仅允许对应ip访问并且授予了 slave(用于复制)与 client(用于切换主备)权限)



 -- 配置主库和备库:


          首先在主库my.cnf文件(我的在/etc/my.cnf)增加或修改如下:


          log_bin = mysql-bin


          server_id = 10


然后 SHOW MASTER STATUS测试如下:




注:server_id设置为10是为了不重复(默认为1)  ----重启下mysql(server mysqld restart)


          备库上增加或修改my.cnf如下:


log_bin = mysql-bin


server_id = 2


relay_log = /usr/local/mysql/mysql-relay-bin


log_slave_updates = 1


read_only = 1


注:relay_log指定 中继日志的命名和位置(该文件夹需 权限,先给个777吧),log_slave_updates允许备库将 重放日志也记录在备库二进制日志文件,read_only仅 允许用户在备库 读取   ----重启下mysql(server mysqld restart)



连接到主库并 重放其二进制日志


          该步不需要修改my.cnf而是采用 CHANGE MASTER TO语句(在 备库执行)


          CHANGE MASTER TO MASTER_HOST='119.29.37.xx',


          MASTER_USER='repl',


          MASTER_PASSWORD='password',


          MASTER_LOG_FILE='mysql-bin.000007',


          MASTER_LOG_POS=0;


参数说明:MASTER_LOG_POS=0日志 从头开始读,


               MASTER_USER为前面创建的 用户


               MASTER_HOST为主库 主机


配置主库测试时的FILE


然后使用 SHOW SLAVE STATUS 检查复制是否正确执行



《高性能mysql》之复制(第十章)_高性能_03



注:Slave_IO_State、Slave_IO_Running、Slave_SQL_Running显示当前备库复制 尚未运行。



          然后 START SLAVE 开始复制


          

《高性能mysql》之复制(第十章)_mysql_04


          再次用 SHOW SLAVE STATUS  查看发现备库复制是否运行


          然后 SHOW PROCESSLIST\G 查看主库和备库是否连接成功。


          


-- 从另一个服务器开始配置:假设 主备库刚安装好且都是 默认配置,此时两台 数据一致,并且二进制日志为新,但是如果是安装好主库安装另一备库就会出现问题。


                解决思路:须先将数据同步到新增备库(冷备份(先关闭数据库)、热备份、使用mysqldump、快照等)


  -- 推荐的复制配置:


二进制日志同步到磁盘上,保证服务器 崩溃时不会丢失事件。


InnoDB,下列强烈推荐使用:


                    innodb_flush_logs_at_trx_commit


                    innodb_support_xa=1


                    innodb_safe+binnlog


fsync开销可开启如下防止不刷新到磁盘


                    sync_master_info = 1


                    sync_relay_log = 1


                    sync_relay_log_info = 1



③复制的原理:


      赋值有两种方式:基于语句复制和基于行复制


 -- 基于行/语句哪种更优:


          基于语句优点:兼容小细节,sql语句结构可有所差异


          基于语句确定:对于特殊情况如触发器或者存储过程等不支持


          


          基于行优点:可处理高级用法(如触发器),减少锁的使用,有利于某些数据恢复,占用更少CPU,报错不存在记录。


          基于行缺点:语句无在日志记录,难以判断那些sql更新过程,像黑盒子,很难知道问题所在


         


 -- 发送复制文件到其他备库;


           log_slave_updates可让备库变成其他服务器主库


           

《高性能mysql》之复制(第十章)_linux_05


 注:服务器ID可打破无限循环---server_id      


          


-- 复制过滤器:复制过滤允许你 仅复制服务器上一 部分的数据(不过不好用),容易造成主备 不同步或出错。


          

《高性能mysql》之复制(第十章)_linux_06


:更多复制拓扑深入请了解高性能mysql     

举报

相关推荐

0 条评论