MySQL主从复制(基于 5.6)
- 数据库
- 2023-07-17
- 67热度
- 0评论
MySQL主从复制(基于 5.6)
https://dev.mysql.com/doc/refman/5.6/en/replication.html
https://dev.mysql.com/doc/refman/5.6/en/faqs-replication.html
https://dev.mysql.com/doc/refman/5.6/en/replication-howto.html
第一步:
主服务器 my.cnf
最小化配置
[mysqld]
log-bin=mysql-bin
server-id=1
以下为 mysql
推荐配置,但是会影响性能,一般DBA不设置此配置
innodb_flush_log_at_trx_commit=1
sync_binlog=1
以下为完整配置
[mysqld]
server-id=1
log-bin=mysql-bin
binlog-ignore-db=mysql # 不同步mysql库
binlog_cache_size=1M # 为每个session分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_format=mixed # 主从复制模式,(mix,statement,row,默认statement)
expire_logs_days=7 # 二进制日志自动删除/过期的天数,默认0不删除
user=mysql
port=33306
datadir=/data/mysql/data
第二步:
副本服务 my.cnf
[mysqld]
server-id=2
log-bin=mysql-bin-slave1
binlog-ignore-db=mysql
binlog_cache_size=1M
binlog_format=mixed
expire_logs_days=7
user=mysql
port=33306
datadir=/data/mysql/data
第三步:
创建复制用户
主服务需要建立个同步账户,并具有 REPLICATION SLAVE
的权限,每个副本也需要同步账户,但是可以是不同的账户也可以是相同账户。
在主服务:
CREATE USER 'repl'@'%' IDENTIFIED BY '*Repl@faw2022*';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
第四步:
获取主服务二进制日志坐标
需要先执行 FLUSH TABLES WITH READ LOCK;
阻止对InnoDB
表的提交操作
SHOW MASTER STATUS;
来确定二进制日志文件的位置,记录下 POSITION
的值
mysql> UNLOCK TABLES;
(这个释放锁,可以是在同步完 slave 服务后,再释放,如果master
没人在读写数据,此第四步可以不锁)
第五步:
通过 mysqldump
创建数据快照
mysqldump -uroot -psino@Soft2022 --all-databases --master-data > dbdump.db
--master-data
选项:自动追加 在副本启动复制过程需要的 CHANGE MASTER TO
语句
第六步:
在从服务执行:
mysql -uroot -psino@Soft2022 < dbdump.db
第七步:
在从服务 slave
中设置 master
信息:
mysql> CHANGE MASTER TO master_host='10.123.240.71', master_user='repl', master_password='Repl@faw2022', master_port=33306, MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=120, master_connect_retry=30;
第八步:
在从服务启动slave:
mysql> START SLAVE;
第九步(成功):
在从服务确认 slave
状态:
mysql> show slave status\G;
Slave_IO_Running
、Slave_SQL_Running
这些都是 YES
状态,就表示从节点在工作了
在主从复制的节点中,再加从节点:
主节点宕机如何快速切换:
https://dev.mysql.com/doc/refman/5.6/en/replication-solutions-switch.html