mysql数据主从配置过程也可参考mysql官网的主从复制介绍:



主节点配置:

(1) 启用二进制日志

[mysqld]

log_bin

(2) 为当前节点设置一个全局惟一的ID号

[mysqld]

server_id=#    设置一个全局惟一的ID号

log-basename=master 可选项,设置datadir中日志名称,确保不依赖主机名

(3) 创建有复制权限的用户账号

GRANT REPLICATION SLAVE ON *.* TO 'mysql'@'IP地址' IDENTIFIED BY 'passwd';


从节点配置:

(1) 启动中继日志

[mysqld]

server_id=# 为当前节点设置一个全局惟的ID号

relay_log=relay-log relay log的文件路径,默认值hostname-relay-bin

relay_log_index=relay-log.index 默认值hostname-relay-bin.index

(2) 使用有复制权限的用户账号连接至主服务器,并启动复制线程

mysql> CHANGE MASTER TO MASTER_HOST='IP地址',MASTER_USER='mysql', MASTER_PASSWORD='passwd',MASTER_LOG_FILE='mysql-bin.xxxxx', MASTER_LOG_POS=#;

mysql> START SLAVE ;



复制架构中应该注意的问题

1、限制从服务器为只读

在从服务器上设置read_only=ON 注意:此限制对拥有SUPER权限的用户均无效

阻止所有用户, 包括主服务器复制的更新

mysql> FLUSH TABLES WITH READ LOCK;

2、 RESET SLAVE

在从服务器清除master.info ,relay-log.info, relay log ,开始新的relaylog ,注意:需要先STOP SLAVE

RESET SLAVE ALL 清除所有从服务器上设置的主服务器同步信息如:PORT, HOST, USER和 PASSWORD 等

3、 sql_slave_skip_counter = N 从服务器忽略几个主服务器的复制事件,global变量



如何保证主从复制的事务安全


在master节点启用参数:

sync_binlog=1 每次写后立即同步二进制日志到磁盘,性能差

如果用到的为InnoDB存储引擎:

innodb_flush_log_at_trx_commit=1 每次事务提交立即同步日志写磁盘

innodb_support_xa=ON 默认值,分布式事务MariaDB10.3.0废除

sync_master_info=# #次事件后master.info同步到磁盘

      在slave节点启用服务器选项:

skip_slave_start=ON 不自动启动slave

      在slave节点启用参数:

sync_relay_log=# #次写后同步relay log到磁盘

sync_relay_log_info=# #次事务后同步relay-log.info到磁盘

复制的监控和维护

(1) 清理日志

PURGE { BINARY | MASTER } LOGS { TO 'log_name' | BEFORE

datetime_expr }

RESET MASTER

RESET SLAVE

(2) 复制监控

SHOW MASTER STATUS

SHOW BINLOG EVENTS

SHOW BINARY LOGS

SHOW SLAVE STATUS

SHOW PROCESSLIST

(3) 从服务器是否落后于主服务

Seconds_Behind_Master: 0

(4) 如何确定主从节点数据是否一致

percona-tools

(5) 数据不一致如何修复

删除从数据库,重新复制

(6)如果主节点已经运行了一段时间,且有大量数据时,如何配置并启动slave节点:

通过备份恢复数据至从服务器,复制起始位置为备份时,二进制日志文件及其POS