一、复制架构中应该注意的问题: 1、限制从服务器只读 在从服务器上设置read_only=ON,此限制对拥有SUPPER权限的用户均无效; 阻止所有用户(在从服务器执行一下命令并保持此线程,也就是执行后不退出改终端): mysql> FLUSH TABLES WITH READ LOCK; 2、如何保证主从复制的事务安全? 在master节点启用参数: sync_binlog=ON 如果用到的为InnoDB存储引擎: innodb_flush_logs_at_trx_commit=ON innodb_support_xa=ON sync_master_info 在slave节点: skip_slave_start=ON(手动启动salve线程) sync_relay_log sync_relay_log_info 二、主主复制: 互为主从: 1、数据不一致;(只能二选其一) 2、自动增长id: 配置一个节点使用奇数id auto_increment_offset=1 auto_increment_increment=2 另外一个节点使用偶数id auto_increment_offset=2 auto_increment_increment=2 配置步骤: 1、各节点使用一个唯一server_id; 2、都启用binary_log和relay_log; 3、创建拥有复制权限的用户账号; 4、定义自动增长id字段的数值范围为奇偶; 5、均把对方指定为主节点,并启动复制线程; 三、半同步复制: master: mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so'; mysql> SET GLOBAL VARIABLES rpl_semi_sync_master_enabled=1; mysql> SHOW GLOBAL VARIABLES LIKE '%semi%'; mysql> SHOW GLOBAL STATUS LIKE '%semi%'; slave mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so'; mysql> SET GLOBAL VARIABLES rpl_semi_sync_master_enabled=1; 四、复制过滤器: 让从节点仅复制指定的数据库,或指定数据库的指定表; 有两种实现方式 1、主服务器仅向二进制日志中记录与特定数据库(特定表)相关的事件; 问题:时间还原无法实现:不建议使用 binlog_do_db= # 数据库白名单列表 binlog_ignore_db= # 数据库黑名单列表 2、从服务器SQL_THREAD在replay中继日志中的事件时,仅读取与特定数据库(特定表)相关的事件并应用于本地 问题:会造成网络及磁盘IO浪费 库级复制 replicate_do_db= # 复制库的白名单 replicate_ignore_db= # 复制库的黑名单 表级复制 replicate_do_table= # 复制表的白名单 replicate_ignore_table= # 复制表的黑名单 五、基于SSL复制: 前提:支持SSL 查看方式:SHOW GLOBAL VARIABLES LIKE '%ssl%'; 1、master配置证书和私钥:并且创建一个要求必须使用SSL连接的复制账号; GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'fansik'@'192.168.1.1' IDENTIFIED BY 'fanjinbao' REQUIRE SSL; 2、slave端使用CHANGE MASTER TO命令时指明ssl相关选项; MASTER_SSL = {0|1} MASTER_SSL_CA = 'ca_file_name' MASTER_SSL_CAPATH = 'ca_directory_name' MASTER_SSL_CERT = 'cert_file_name' MASTER_SSL_CRL = 'crl_file_name' MASTER_SSL_CRLPATH = 'crl_directory_name' MASTER_SSL_KEY = 'key_file_name' MASTER_SSL_CIPHER = 'cipher_list' MASTER_SSL_VERIFY_SERVER_CERT = {0|1} MASTER_TLS_VERSION = 'protocol_list' IGNORE_SERVER_IDS = (server_id_list) 六、与复制功能相关的文件: master.info:用于保存slave连接至master时的相关信息,例如账号、密码、服务器地址等; relay-log.info:保存在当前slave节点上已经复制的当前二进制日志和本地relay log日志的对应关系; 七、复制的监控和维护: 1、清理日志: SHOW BINARY LOGS; PURGE BINARY LOGS TO 'mysql-bin.000008'; # 清理8之前的日志 2、复制监控 SHOW MASTER STATUS; SHOW BINLOG EVENTS; SHOW BINARY LOGS; SHOW SLAVE STATUS; SHOW PROCESSLIST; 3、从服务器是否落后于主服务: SHOW SLAVE STATUS\G;中查看一下选项 Seconds_Behind_Master: 0 4、如何确定主从节点数据是否一致: percona-tools 5、数据不一致如何修复? 重新复制