主服务器搭建
-
准备三台服务器,一主一从一备
-
在主服务器(master)下找到mysql配置文件。
Window下为my.ini(一般在C:ProgramDataMySQLMySQL Server 5.7下); Linux下为/etc/my.cnf -
在[mysqld]下添加如下配置
# 服务的唯一编号
server-id=1
# 开启mysql binlog功能 slave会基于此log-bin来做replication
log-bin=master-bin
log-bin-index=master-bin.index
# binlog记录内容的方式,记录被操作的每一行
binlog_format=ROW
# 减少记录日志的内容,只记录受影响的列
binlog_row_image=minimal
# 指定需要复制的数据库名
# 如果没有指定会监听复制所有的库,新建库操作也会复制,反之只监听复制指定的库
binlog-do-db=test
#不用于master-slave的具体数据库
binlog_ignore_db=mysql
binlog_ignore_db=information_schema
- 授权
我们需要给slave配置一个用户/密码的权限
# 只读赋权
GRANT SELECT ON *.* TO 'lucky'@'slave服务器IP' IDENTIFIED BY 'luckytea';
# 从权限 赋权
GRANT REPLICATION SLAVE ON *.* TO 'luckytea'@'slave服务器IP' IDENTIFIED BY 'luckytea';
# 刷新权限
FLUSH PRIVILEGES;
- 重启mysql
系统 | 命令 |
---|---|
Linux | service mysqld restart; |
Window | net stop mysql; net start mysql; |
6、 查看主服务器状态
注意!更改配置或者数据库重启,主库日志的Position会改变,从库需要重新配置
# 确保主从库数据库结构一致
# 查看server-id 是否和配置一致,从服务器id需要大于主服务器id
show variables like '%server_id%'
# 将下列结果中 File和 Position 记录后交给从服务器搭建人员
show master statusG;
从服务器搭建
- 在从服务器(slave)下找到mysql配置文件。
Window下为my.ini(一般在C:ProgramDataMySQLMySQL Server 5.7下); Linux下为/etc/my.cnf - 在[mysqld]下添加如下配置
log-bin=relay-bin
#先全局查找注释原来的server-id
server-id=2
#保存配置进行重启查看server-id
show variables like '%server_id%';
- 进入slave的mysql命令行 执行
CHANGE MASTER TO
MASTER_HOST='master所在服务器的IP',
MASTER_USER='master授权的账号',
MASTER_PASSWORD='master授权的密码',
MASTER_LOG_FILE='master的日志文件名',
MASTER_LOG_POS=master的日志所在位置;
- 执行服务 并查看状态
# 关闭防火墙或者打开端口权限
# 查看server-id 是否和配置一致,从服务器id需要大于主服务器id
show variables like '%server_id%'
start slave;
show slave statusG;
# 请确认 Master_Log_File = 主服务器的File, Read_Master_Log_Pos = 主服务器的Position
# 请确认 Slave_IO_Running = Slave_SQL_Running = yes
- 如果Slave_SQL_Running = No
方法一:说明从库执行了错误操作,请进行回滚
stop slave ;
set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
start slave ;
show slave statusG;
方法二:重新进行一次同步操作
stop slave ;
CHANGE MASTER TO
MASTER_HOST='master所在服务器的IP',
MASTER_USER='master授权的账号',
MASTER_PASSWORD='master授权的密码',
MASTER_LOG_FILE='master的日志文件名',
MASTER_LOG_POS=master的日志所在位置;
start slave;
show slave statusG;
- 修改主库数据库,如从库变化,则配置成功
主主互备
主主互备:服务器1是服务器2的主服务器,服务器2也是服务器1的主服务器,互相进行主从备份。主从备份过程参考如上。
注意,为了避免主键id冲突,需要加入如下配置
主服务器1 在/etc/my.cnf下[mysqld]加入如下语句,使得新增id全为奇数
# 自增id起始值
auto_increment_offset=1
# 每次自增数字
auto_increment_increment=2
主服务器2 在/etc/my.cnf下[mysqld]加入如下语句,使得新增id全为偶数
# 自增id起始值
auto_increment_offset=2
# 每次自增数字
auto_increment_increment=2
注意,本教程未考虑灾备和脑裂的情况,暂行方案是连接客户端时捕获异常,切换ip连接。
灾备+脑裂 推荐使用keepaliver,但是脚本需要自己编写,较复杂
只灾备不考虑集群,可以先上nginx,用upstream的backup做简单灾备 参考官网文档