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

①复制概述:
     -- 概念:让一台服务器的数据与其他服务器保持同步。
          复制通常不会增加主库的开销,主要是启用二进制日志带来的开销,每个备库也会对主库增加一些负载(例如网络I/O开销)
          一主库多备库,造成一些浪费,含大量不必要重复

     -- 复制解决的问题:数据分布、负载均衡(通过mysql复制可将读操作分布到多个服务器上)、备份(但不是真的备份技术)、高可用性和故障切换、Mysql升级测试。
     -- 复制如何工作主库数据 更新到 二进制日志文件 -> 备库通过I/O线程 复制主库日志并写入中继日志 -> 备库读取中继日志并 重放 数据库
            《高性能mysql》之复制(第十章)_第1张图片
 
②配置复制:
      -- 创建账号
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TOrepl@'119.29.155.%' IDENTIFIED BY 'password';

     注:以上创建一 账号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为主库 主机
               MASTER_LOG_FILE为 配置主库测试时的FILE
然后使用 SHOW SLAVE STATUS 检查复制是否正确执行

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

          然后 START SLAVE 开始复制
           《高性能mysql》之复制(第十章)_第2张图片
          再次用 SHOW SLAVE STATUS  查看发现备库复制是否运行
          然后 SHOW PROCESSLIST\G 查看主库和备库是否连接成功。
          
          -- 从另一个服务器开始配置:假设 主备库刚安装好且都是 默认配置,此时两台 数据一致,并且二进制日志为新,但是如果是安装好主库安装另一备库就会出现问题。
                解决思路:须先将数据同步到新增备库(冷备份(先关闭数据库)、热备份、使用mysqldump、快照等)
          -- 推荐的复制配置
               sync_binlog:sync_binlog=1 开启时Mysql每次在提交事务前会将 二进制日志同步到磁盘上,保证服务器 崩溃时不会丢失事件。
               如果使用 InnoDB,下列强烈推荐使用:
                    innodb_flush_logs_at_trx_commit
                    innodb_support_xa=1
                    innodb_safe+binnlog
               在mysql5.5中不介意 fsync开销可开启如下防止不刷新到磁盘
                    sync_master_info = 1
                    sync_relay_log = 1
                    sync_relay_log_info = 1

③复制的原理:
      赋值有两种方式:基于语句复制和基于行复制
     -- 基于行/语句哪种更优
          基于语句优点:兼容小细节,sql语句结构可有所差异
          基于语句确定:对于特殊情况如触发器或者存储过程等不支持
          
          基于行优点:可处理高级用法(如触发器),减少锁的使用,有利于某些数据恢复,占用更少CPU,报错不存在记录。
          基于行缺点:语句无在日志记录,难以判断那些sql更新过程,像黑盒子,很难知道问题所在
         
     -- 发送复制文件到其他备库
           log_slave_updates可让备库变成其他服务器主库
            《高性能mysql》之复制(第十章)_第3张图片
           注:服务器ID可打破无限循环---server_id      
          
      -- 复制过滤器:复制过滤允许你 仅复制服务器上一 部分的数据(不过不好用),容易造成主备 不同步或出错。
           《高性能mysql》之复制(第十章)_第4张图片
:更多复制拓扑深入请了解高性能mysql     

你可能感兴趣的:(mysql,高性能MySQL)