mysql主从同步
2018-05-06 本文已影响11人
江江的大猪
依然是通过mysqld_multi管理mysql的两个实例,通过配置my.cnf实现主从同步
- 将一号实例作为master,mysql1下加入如下配置
[mysqld1]
集群中每个实例的id必须唯一
server_id = 1
# 指定同步lfz库,其它库不进行同步
binlog-do-db = lfz
# 可以指定哪些库不进行同步
# binlog-ignore-db = mysql
# 开启二进制日志功能
log-bin=3306logbin
# 为每个session分配的内存,在事务过程中存储二进制日志的缓存
binlog-cache-size = 1M
# 主从复制的格式(mixed,statement,row),默认值statement
binlog_format = mixed
# 默认0,代表二进制日志不会自动删除,这里设置为7天
expire-logs-days = 7
# 跳过主从复制中遇到的所有错误或指定错误,避免slave端复制中断,1062指的是主键重复,1032是主从数据不一致
slave_skip_errors = 1062
- 二号实例作为slave,在mysqld2中加入如下配置
[mysqld2]
server_id = 2
# 从机也可以作为别的从节点的主节点,所以也开启了binlog,所以加了这个选项
binlog-do-db = lfz
# 为了从节点作为别的从节点的主节点
log-bin=3307logbin
binlog-cache-size = 1M
binlog_format = mixed
expire-logs-days = 7
slave_skip_errors = 1062
# 中继日志
relay_log = 3307relaylog
# slave将复制事件写入自己的二进制日志
log_slave_updates = 1
# 从库只读,使用mycat读写分离的主从切换就不能设置从库只读了
#read_only = 1
- 如果当前master已经有数据了,可以先将数据导出,再导入slave
# 登录master锁表,避免导出过程还有数据写入
flush tables with read lock
# 使用mysql自带工具导出数据到文件,--add-drop-table代表在创建表之前先写入一条删除表的语句
mysqldump -p3306 -uroot -p --add-drop-table -S 3306/mysql.sock lfz > ./tmp.sql
unlock tables;
# 导入slave
mysql -uroot -proot -S 3307/mysql.sock lfz< ../tmp.sql
- 设置slave实例并启动
# 登录master查看状态,获得当前使用的binlog名字和偏移量
show master status;
# 登录slave设置要使用的master信息
change master to master_host='127.0.0.1',master_user='root',master_password='root',master_port=3306,master_log_file='3306logbin.000003',master_log_pos= 120,master_connect_retry=30;
# 启动slave模式
start slave;
# 查看slave状态
show slave status;
# 如果主从同步出了问题,可以重置slave
reset slave;
change master...