Mysql-主从复制

 2022-08-23    0 条评论    26831 浏览

mysql

查看版本

select version();

说明

  • 源mysql服务必须开启二进制日志记录,并设置非零的唯一的服务器ID(server_id)
  • 复制拓扑中,主从服务都要设置不唯一的非零的ID。
  • 可以使用server_id变量指定该ID。
  • 并且必须是 1 ~ (2 32 )-1之间的正整数。

设置server_id

您可以server_id通过发出如下语句来动态更改该值(必须不为0时才能如此设置):

SET GLOBAL server_id = 2;

  当服务的ID默认为0时,源会拒绝被链接,副本服务也会拒绝去连接源。且必须通过配置文件修改ID,且重启。

  查看server_id

show variables like 'server_id';

开启二进制记录

源开启二进制记录,是主从复制的基础。

开启方式

关闭mysql服务,并修改 my.cnf或my.ini文件

在[mysqld]配置文件的部分中,添加log-bin和 server-id选项。

[mysqld]
log-bin=mysql-bin
server-id=1

进行更改后,重新启动服务器。

笔记

以下选项会影响此过程:

  为了在使用InnoDB事务的复制设置中获得最大可能的持久性和一致性 ,您应该在源文件中使用 innodb_flush_log_at_trx_commit=1和 sync_binlog=1my.cnf

  确保skip_networking您的源上未启用系统变量。如果网络已禁用,副本将无法与源通信并且复制失败。

创建复制用户(可选)

数据备份

主从复制需先将两个服务的数据进行同步,也就是将主服务锁住,并将数据导入到从服务中

master端刷新并锁表

刷新并锁表

FLUSH TABLES WITH READ LOCK;

获取坐标

查看master的二进制日志文件坐标信息

mysql> SHOW MASTER STATUS;
+------------------+-----------+--------------+------------------+-------------------------------------------------+
| File             | Position  | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                               |
+------------------+-----------+--------------+------------------+-------------------------------------------------+
| mysql-bin.002203 | 153734229 |              |                  | c8fff730-1d0d-11eb-8cd3-00259015d928:1-10906592 |
+------------------+-----------+--------------+------------------+-------------------------------------------------+
1 row in set (0.01 sec)

master数据导出

数据导出

/opt/hansight/enterprise/mysql/bin/mysqldump -S /data01/mysql/db/mysql.sock -uhansight -p --all-databases  > /home/hou/dbdump.db

master释放锁表

UNLOCK TABLES;

如果允许,可以先关闭master源,也可以不关闭只锁表。

slave导入迁移数据

slave数据导入

/opt/hansight/enterprise/mysql/bin/mysql -S /data01/mysql/db/mysql.sock -uhansight -p -P3399 --default-character-set=utf8 < dbdump.db

重置操作

如果slave导入失败,则重置gtid,再次执行导入操作

reset master;

主从复制配置

设置副本ID,与master区分开

设置id

[mysqld]
server-id=2

设置副本源链接信息

CHANGE MASTER TO
MASTER_HOST='源IP',
MASTER_PORT=源端口,
MASTER_USER='源用户',
MASTER_PASSWORD='密码',
MASTER_LOG_FILE='日志文件名称(File)',
MASTER_LOG_POS=坐标id(Position);

启动slave复制线程

start slave