MySQL实现主从复制功能

MySQL内建的复制功能是构建大型,高性能应用程序的基础。将MySQL的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(Slave)上,并重新执行一遍来实现的。复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。

请注意当进行复制时,所有对复制中的表的更新必须在主服务器上进行。否则,你必须要小心,以避免用户对主服务器上的表进行的更新与对从服务器上的表所进行的更新之间的冲突。

主从复制实现

修改主(master)服务器

my.cnf配置文件下添加如下配置

server_id=1 #指定MySQL的id
log-bin=mysql-bin #开启二进制日志文件

创建复制账号

在主服务器中执行该命令(这里允许了所有的地址访问,建议设置成从服务器的地址)

GRANT REPLICATION SLAVE ON *.* to 'replication'@'%' identified by 'Abc123...';

修改从(slave)服务器

server_id=2
log-bin=mysql-bin
binlog_do_db=db_test #表示要同步的数据库

说明:

  • binlog-ignore-db=test #表示不同步 test 数据库
  • binlog_do_db=db_test #表示要同步的数据库

重启MySQL

主服务器和从服务器都重启

systemctl restart mysqld

查看主服务器状态

show master status

结果如下:

mysql> show master status;
+------------------+-----------+--------------+------------------+-------------------+
| File             | Position  | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+-----------+--------------+------------------+-------------------+
| mysql-bin.000001 |       188 |              |                  |                   |
+------------------+-----------+--------------+------------------+-------------------+
1 row in set (0.01 sec)

这里有些信息需要记录下来,在配置从服务器时候需要用到

配置从服务器(连接 Master 服务器)

change master to master_host='192.168.74.129',master_user='replication',master_password='Abc123...',master_log_file='mysql-bin.000001',master_log_pos=2041;
  • master_host:是主服务器的ip
  • master_port=3306:这里没有配置,默认3306
  • master_user:Master 服务器授权用户,也就是 Master 前面创建的那个用户
  • master_password:Master 服务器授权用户对应的密码
  • master_log_file:Master binlog 文件名
  • master_log_pos:Master binlog 文件中的 Postion 值

关于position值,这里做一个说明:如果主服务器已经是有很多数据了的,那就先需要备份主服务器的数据到从服务器中,然后再使用命令show master status记录需要开始同步的位置。

开始复制

在从服务器中执行

start slave;

停止的命令是:stop slave

查看从服务器状态

show slave status\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

表示主从复制配置成功。如果配置失败,可以去MySQL的日志文件中查看失败信息,也可以通过上述命令查看一个简要的错误信息:

Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.

主要原因是MySQL服务器的Server的UUID冲突,原因是从服务器是从主服务器上复制过去的。到/var/lib/mysql/my.cnf上修改即可。

验证主从结果

在主库新建一个表,看看从库是否可以同步过去

版权声明:
作者:Joe.Ye
链接:https://www.appblog.cn/index.php/2023/03/12/mysql-implement-master-slave-replication-function/
来源:APP全栈技术分享
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
海报
MySQL实现主从复制功能
MySQL内建的复制功能是构建大型,高性能应用程序的基础。将MySQL的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机……
<<上一篇
下一篇>>
文章目录
关闭
目 录