代码改变世界

创建一个已经存在数据的MySQL复制

  abce  阅读(477)  评论(0编辑  收藏  举报

1.配置master库
必须开启二进制日志和分配唯一的server id
·如果没设置server-id或将其设置为0,master节点会拒绝slave的连接
·建议在master节点设置innodb_flush_log_at_trx_commit=1和sync_binlog=1,保证复制环境事务的持久性和一致性
·不要在master节点开启skip-networking,否则网络断开后,slave节点就无法连接到master节点

1
2
3
4
# vim /etc/my.cnf
[mysqld]
server-id=1
log-bin=mysql-bin

 

2.master库中创建用于复制的用户

建议创建一个单独的用户用于复制(用户名和密码都会被存放在一个纯文本文件master.info中)

mysql> create user 'repl'@'%.mydomain.com' identified by 'slavepass';
mysql> grant replication slave,replication client on *.* to 'repl'@'%.mydomain.com';

 

3.配置salve库
配置唯一的server-id
slave节点可以不开启二进制日志,但是开启了二进制日志后,可以在slave节点进行数据备份和crash恢复操作
如果开启参数report-host=hostname,则可以在master节点使用命令"show slave hosts" 

1
2
3
4
5
6
# vim /etc/my.cnf
[mysqld]
server-id=2
relay_log=/var/mysql/log/mysql-relay-bin
log_slave_updates=1   #备库将其重放事件也记录到自身的二进制日志中(会给服务器增加额外负担)
read_only=1

 

4.获取master的当前状态

启动复制必须要告诉slave节点从哪里开始复制,即master节点的二进制日志的当前位置

(1)在master节点,开启一个会话执行以下命令:

mysql> flush tables with read lock;

执行该命令会flush所有的表并阻塞其它对master的写操作。如果是innodb表,也会阻塞提交操作。
(2)在master节点,开启另一会话执行以下命令:

mysql > show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 | 73       | test         | manual,mysql     |
+------------------+----------+--------------+------------------+

 

5.原始数据同步到复制节点

(1)导出数据

1
2
3
# mysqldump --all-databases --master-data > fulldb.dump
mysql> unlock tables;
mysql> exit;

(2)将导出数据文件传送到复制节点

(3)启动slave,加上参数--skip-slave-start(不开启复制)

(4)在复制节点导入数据

1
# mysql < fulldb.dump
1
2
3
如果数据库较大,拷贝裸数据文件的效率会比mysqdump快。 最好是shutdown database进行冷拷贝
(1)将数据文件拷贝解压到相应的目录
(2)启动slave,加上参数--skip-slave-start(不开启复制)

 

6.使用master位置信息配置slave(二进制文件的名称和位置)

mysql> change master to
    ->     master_host='master_host_name',
    ->     master_user='replication_user_name',
    ->     master_password='replication_password',
    ->     master_log_file='recorded_log_file_name',
    ->     master_log_pos=recorded_log_position;

 

7.启动slave

1
mysql> start slave;

 

编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示