Mysql主从复制配置
1.首先尽量保证两个mysql数据库版本保持一致(版本向下兼容:Master的版本肯定不能高于Slave版本)
2.修改数据库配置文档my.in文件加入以下(windows系统修改 my.ini,linux修改 my.cnf,下面介绍的windows的配置)
(1)修改my.ini
#主库配置(主数据库的my.ini文件内加入以下 复制请去掉注释)
server_id=1 #(必须 推荐使用服务ip地址末尾 但是不能和从数据库服务id一致)
log_bin=master-bin(必须)
log_bin-index=master-bin.index(必须)
# 需要同步的数据库
# binlog-do-db=laowu #(可选 需要同步的数据库 可以配置一个 也可以配置多个 配置多个数据库时 #只需要另起一行配置 )
# 不需要同步的数据库
# binlog-ignore-db=mysql#(可选 不需要同步的数据库 意思除此之外都同步 不推荐 )
注意:不需要同时配置 同步和不同步 根据业务自己选择 是配置同步和不同步 如果不配置那么所有数据库数据全部同步
#从数据库配置(从数据库的my.ini文件内加入以下 复制请去掉注释)
server_id=2#(必需)
relay-log-index=slave-relay-bin.index#(必需)
relay-log=slave-relay-bin#(必需)
(2) 执行命令
1.查询主数据库 show master status;
2.登录从数据库执行:(执行时请注意去掉注释)
stop slave;#关闭从数据库复制;
CHANGE MASTER TO MASTER_HOST='192.168.0.1',#主数据库地址
MASTER_PORT=3306,#主数据库的端口号
MASTER_USER='root',#主数据库的账号(不推荐使用 root 新创建账号 要用远程登录和file、posittion权限)
MASTER_PASSWORD='jishuzhai',#主数据库的密码
MASTER_LOG_FILE='master-bin.000005',#刚才查询主数据的file值
MASTER_LOG_POS=970;#刚才查询主数据库的Position的值
3.登录从数据库执行:
start slave;#打开从数据库复制
Show slave status;查看从数据库的复制状态
3.注意:
(1).如果slave_io_running 和 slave_sql_running值均为No 那么salve处于未打开状态
执行 start slave 开启slave状态
(2).如果slave_io_running 值为 Connecting 或 slave_sql_running的值为no 检查网络是否正常(两台服务器是否能通讯)、检查第二步时输入的账号密码是否错误(最好直接远程登录一下)、检查第2步MASTER_LOG_FILE和MASTER_LOG_POS是否和主数据库查询的一致,注意每次执行第二步之前最好先查询一下(因为这个值会更改)
(3).每次重新执行第二步时要确保slave数据库的状态是关闭的 执行 stop slave 关闭从数据库复制状态
(4).数据库回滚原因导致slave_sql_running值为No
STOP SLAVE #先执行关闭语句
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;#重置值
START SLAVE #打开语句
SHOW SLAVE STATUS 然后查询状态 观察slave_io_running 和 slave_sql_running值
(5). 主库和从库不一致导致主从瘫痪的解决方案
SHOW VARIABLES LIKE 'slave_exec_mode';
#测试阶段应用,优雅的避过1032错误:从表不存在导致的错误
SET GLOBAL slave_exec_mode='IDEMPOTENT';
#正式阶段应用,也是默认设置,原来的设置
SET GLOBAL slave_exec_mode='STRICT';