最为一个后端 要具有学习精神 往全栈发展
今天安排了一个任务 实现数据库的主主复制,看了N多资料,现在总结一下
前期准备 2台服务器(我是一台wendows + 一台windoes镜像的虚拟机)
分别装上mysql数据库(ps:最好版本一致)
而且保证2台电脑可以ping通(如果不能ping通,关闭电脑防火墙)
安装好sql后,更改其配置文件:windows版本位置:C:\ProgramData\MySQL\MySQL Server 5.6
(ps:配置文件一定是在ProgramData文件夹里面)
(以下代码命令,皆在mysql命令里面执行)
计算机开始菜单,找到以下图标,点击即可
配置文件修改 my.ini (或者名为:my.cnf)
配置说明
#[必须]服务器唯一ID,每台服务器需不同
server-id = 1
#[必须]启用二进制文件
log-bin = /home/mysql/mysql-bin
#[不是必须]二进制文件启用混合模式
binlog_format = mixed
#[不是必须]二进制文件过期时间,单位是天
expire-logs-days = 14
#[不是必须]当每进行1次事务提交之后,MySQL将进行一次磁盘同步指令来将binlog_cache中的数据强制写入磁盘
sync-binlog = 1
#[不是必须]只将对应的数据库变动写入二进制文件。如果有多个数据库可用逗号分隔,或者使用多个binlog-do-db选项
binlog-do-db = test,androidpnserver
#[必须]不需要记录二进制日志的数据库。如果有多个数据库可用逗号分隔,或者使用多个binlog-do-db选项。一般为了保证主主同步不冲突,会忽略mysql数据库。
binlog-ignore-db = mysql,information_schema,performance_schema
#[必须]做主主备份的时候,因为每台数据库服务器都可能在同一个表中插入数据,如果表有一个自动增长的主键,那么就会在多服务器上出现主键冲突。
#解决这个问题的办法就是让每个数据库的自增主键不连续。上面两项说的是,假设需要将来可能需要10台服务器做备份,将auto-increment-increment设为10。而auto-increment-offset=1表示这台服务器的序号。从1开始,不超过auto-increment-increment。
auto-increment-increment = 10
auto-increment-offset = 1
**
主数据库配置
**
添加信息添加在 [mysqld] 标签下
[mysqld]
server-id=1
log-bin = mysql-bin
binlog-do-db = bd-ecxel
binlog-ignore-db = mysql,information_schema,performance_schema
auto-increment-increment = 10
auto-increment-offset = 2
**
次服务器配置
**
[mysqld]
server-id=2
server-id=1
log-bin = mysql-bin
binlog-do-db = bd-ecxel
binlog-ignore-db = mysql,information_schema,performance_schema
auto-increment-increment = 10
auto-increment-offset = 2
**
首先进行刷新,停止线程
执行 stop slave;
reset slave;
flush privileges;
创建同步账号
**
格式
grant replication slave on *.* to '<userName>'@'<hostIp>' identified by '<passWord>';`
# userName 用户名,默认root
# passWord 用户密码(均为数据库账户,密码)
# hostIp 需要同步的主机IP,可以写%,表示全部
在2个数据库分别执行一次
grant replication slave on *.* to 'root'@'%' identified by 'Accp1234';
查看master状态
show master status;
# MASTER_LOG_FILE 和 MASTER_LOG_POS 注意这2个参数,后面需要用
使用change语句执行同步位置,(如果只做主从复制,主需要在主服务器执行一次即可)
CHANGE MASTER TO MASTER_HOST='10.10.2.74',MASTER_PORT=3306,MASTER_USER='root',MASTER_PASSWORD='Accp1234',MASTER_LOG_FILE='mysql-bin.000007',MASTER_LOG_POS=41352;
# MASTER_LOG_FILE 和 MASTER_LOG_POS 参数都是另一台服务通过<show master status;> 查询得到(重点)
# 分别对应 File和Position字段
# 两台服务器都要执行一遍(MASTER_LOG_FILE 和 MASTER_LOG_POS 参数,可能不一样,请注意)
# MASTER_HOST='10.10.2.74' 这个为对方Ip地址
启动slave
# 启动slaave
start slave;
查看slave状态
show slave status\G;
# 主要关注一下两个参数
# Slave_IO_Running: Yes
# Slave_SQL_Running: Yes
如果参数都为YES,说明配置成功,
如果有错误,错误代码是2003,如下
直接百度搜索 错误代码信息 ,进行更改
(如果多台服务器是网络同传的,需要删除C:\ProgramData\MySQL\MySQL Server 5.6\data 下auto.cnf文件,在重启mysql服务)