MySQL实现双主从架构配置
环境信息
服务器信息
IP | 简称 |
---|---|
192.168.94.21 | server21 |
192.168.94.31 | server31 |
配置双主从架构
修改MySQL的配置,开启binlog
如果是新安装的高版本MySQL,默认情况下是没有生成/etc/my.cnf这个文件的,那我们就在etc目录下新增一个my.cnf的配置文件,配置文件参数的意义可以参见博客,这里就不再赘述了。
- 在server21新增my.cnf配置文件
[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
# 特别注意这个server-id,两台MySQL的不能设置成一样的哦
server-id=1
bind-address=0.0.0.0
port=3306
# 数据库安装目录
basedir=/usr/local/mysql
# 数据文件存放目录
datadir=/data/mysqldata
# 字符编码集
character_set_server=utf8
lower_case_table_names=1
binlog-format=mixed
transaction_isolation=REPEATABLE-READ
auto-increment-increment=2 #步长为2
auto-increment-offset=1 #奇数增长(两台server的配置不能一样哦)
log-error=/usr/local/mysql/logs/err.log
log-bin=/data/mysqldata/mysql-bin
log-bin-index=/data/mysqldata/mysql-bin.index
log_slave_updates=1
slow_query_log=1
slow_query_log_file=/usr/local/mysql/logs/slow-queries.log
general_log=1
general_log_file=/usr/local/mysql/logs/general-log.log
expire_logs_days=7
max_binlog_size=1024M
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
max_allowed_packet=128M
max_connections=1000
#skip-name_resolve
log_bin_trust_function_creators=1
- 在server31新增my.cnf配置文件
[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
server-id=2
bind-address=0.0.0.0
port=3306
basedir=/usr/local/mysql
datadir=/data/mysqldata
character_set_server=utf8
lower_case_table_names=1
binlog-format=mixed
transaction_isolation=REPEATABLE-READ
auto-increment-increment=2 #步长为2
auto-increment-offset=2 #奇数增长
log-error=/usr/local/mysql/logs/err.log
log-bin=/data/mysqldata/mysql-bin
log-bin-index=/data/mysqldata/mysql-bin.index
log_slave_updates=1
slow_query_log=1
slow_query_log_file=/usr/local/mysql/logs/slow-queries.log
general_log=1
general_log_file=/usr/local/mysql/logs/general-log.log
expire_logs_days=7
max_binlog_size=1024M
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
max_allowed_packet=128M
max_connections=1000
#skip-name_resolve
log_bin_trust_function_creators=1
- 保存配置,然后重启MySQL
service mysqld restart
如果是新安装的MySQL,登录到MySQL控制台需要先修改密码
设置数据库root用户密码
set password for root@localhost=password('123456');
配置MYSQL主从关系及开启主从同步
- 先登录到server21的MySQL控制台
mysql –u root –p
- 创建主从同步账号,并锁定数据库表
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO slave@'196.168.94.31' IDENTIFIED BY "slave"; #创建同步账号
FLUSH PRIVILEGES; #权限修改立即生效
FLUSH TABLES WITH READ LOCK; #锁定数据库为只读,确保备份数据一致性
- 查看server21的master信息,记录下File和position两个参数的信息(建议查看两次,取最后一次的结果),在建立主从关系的时候用得上
show master status;
如下图所示:
- 再开一个server31的ssh窗口,登录到MySQL控制台,输入以下命令建立server21和server31的主从同步关系
CHANGE MASTER TO MASTER_HOST='196.168.94.31', MASTER_PORT = 3306, MASTER_USER='slave', MASTER_PASSWORD='slave', MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=1093;
- 在server31上创建主从同步账号,并锁定数据库表
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO slave@'196.168.94.21' IDENTIFIED BY "slave"; #创建同步账号
FLUSH PRIVILEGES; #权限修改立即生效
FLUSH TABLES WITH READ LOCK; #锁定数据库为只读,确保备份数据一致性
- 查看server31的master信息参数,记录下File和position两个参数信息,参见第3步
show master status;
- 切回到server21的MySQL控制台,执行以下命令建立主从同步关系
CHANGE MASTER TO MASTER_HOST='196.168.94.21', MASTER_PORT = 3306, MASTER_USER='slave', MASTER_PASSWORD='slave', MASTER_LOG_FILE='mysql-bin.000008', MASTER_LOG_POS=613;
- 分别在两台server上执行命令,开始同步
start slave;
- 执行命令
show slave status\G
查看同步状态信息,查看状态信息中的Slave_IO_Running和Slave_SQL_Running状态为YES即可,如图所示:
- 执行解开对表的锁定
unlock tables;
至此,MySQL的双主从配置就完成了。可以分别在两台机器的数据库上新建表和新插入记录来测试,主从同步是否设置成功。