配置mysql双主
准备两台主机,装好mysql,root能正常登录。
配置mysql方案:让主机1和主机2互为主从
一、主机1配置
1.配置my.cnf
vim /etc/my.cnf
# 配置服务器标识
server-id = 1
# 开启二进制日志记录
log-bin = mysql-bin
binlog-format = ROW
# 配置复制过滤规则(可选)
replicate-ignore-db = mysql
replicate-ignore-db = performance_schema
replicate-ignore-db = sys
# 保存并关闭 :wq
2.重启mysql
systemctl restart mysqld
3.登录MySQL,配置主从账号并授权
mysql -u root -p
#输入密码登录
CREATE USER '账号'@'主机2ip' IDENTIFIED BY '密码';
GRANT REPLICATION SLAVE ON *.* TO '账号'@'主机2ip';
FLUSH PRIVILEGES;
# 获取二进制日志信息,记录下主机1上的 File 值和Position 值
SHOW MASTER STATUS;
二、主机2配置
1.配置my.cnf
vim /etc/my.cnf
# 配置服务器标识
server-id = 2
# 开启二进制日志记录
log-bin = mysql-bin
binlog-format = ROW
# 配置复制过滤规则(可选)
replicate-ignore-db = mysql
replicate-ignore-db = performance_schema
replicate-ignore-db = sys
2.重启mysql
systemctl restart mysqld
3.登录主机2mysql并配置成主机1的从服务器
CHANGE MASTER TO
MASTER_HOST = '主机1ip',
MASTER_PORT = 3306,
MASTER_SSL = 1,
MASTER_USER = '在主机1配的主从账号',
MASTER_PASSWORD = '在主机1配的主从账号密码',
MASTER_LOG_FILE = '主机1上的 File 值',
MASTER_LOG_POS = 主机1上的 Position 值;
# 启动从服务器并查看复制状态
START SLAVE;
SHOW SLAVE STATUS\G
#Slave_IO_Running 和 Slave_SQL_Running 值都为 'Yes',表明复制已成功启动
4.在主机2配置主从账号并授权
CREATE USER '账号'@'主机1ip' IDENTIFIED BY '密码';
GRANT REPLICATION SLAVE ON *.* TO '账号'@'主机1ip';
FLUSH PRIVILEGES;
# 获取二进制日志信息,记录下主机2上的 File 值和Position 值
SHOW MASTER STATUS;
三、主机1配置
1.登录主机1mysql并配置成主机2的从服务器
CHANGE MASTER TO
MASTER_HOST = '主机2ip',
MASTER_PORT = 3306,
MASTER_SSL = 1,
MASTER_USER = '在主机2配的主从账号',
MASTER_PASSWORD = '在主机2配的主从账号密码',
MASTER_LOG_FILE = '主机2上的 File 值',
MASTER_LOG_POS = 主机2上的 Position 值;
# 启动从服务器并查看复制状态
START SLAVE;
SHOW SLAVE STATUS\G
#Slave_IO_Running 和 Slave_SQL_Running 值都为 'Yes',表明复制已成功启动
双主已配置完,请自行测试。
四、问题整理
1.SHOW SLAVE STATUS\G发现报错:
tailf /var/log/mysqld.log
一般都是主从初始数据不一致导致的,比如主库要删除一条数据,但从库没有这条数据,或者,主库比从库多了一个库/表等。这时可以查mysqld.log找到出问题的库表。处理好后重启即可。
2.报错SOURCE_AUTO_POSITION is active
change master to master_auto_position=0;
执行sql关闭SOURCE_AUTO_POSITION就好。