Mysql 主从复制(同步)

一、设计思路

准备两个5.7版本的MySQL,一个用作主数据库,另一个用作从数据库。
把主数据库做为写入数据库,从数据库作为读数据库。

image

二、具体步骤

准备两台数据库,可以本地配置两台Mysql数据库或者局域网两台Mysql数据库。
1.先把你的mysql目录拷贝复制一份,复制出来的那份取名为mysql-slave。
本地数据库之间

image

2.先修改主数据库的my.ini文件,添加以下代码,主要是配置要同步的数据库和屏蔽要同步的数据库:
点击查看代码
[mysqld]
port=3306
log-bin=mysql-bin
server-id=1
#设置需要同步的数据库
binlog-do-db=pump_station
#屏蔽系统库同步
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
max_allowed_packet=500M
expire_logs_days=2

image

3.然后将主数据库注册为系统服务。
点击查看代码
备注:--defaults-file= 后面查看ini配置文件具体位置
mysqld install mysql-master --defaults-file="D:\xampp\mysql\bin\my.ini"

4.然后修改从数据库的my.ini文件,把启动端口和从数据库的路径进行修改:

image

同时加上要同步的数据库表配置,记得server-id也要修改,改成和主数据库不一致就行:

image

点击查看代码
[mysqld]
server-id=2
#设置需要同步的数据库
replicate_wild_do_table=pump_station.%
#屏蔽系统库同步
replicate_wild_ignore_table=mysql.%
replicate_wild_ignore_table=information_schema.%
replicate_wild_ignore_table=performance_schema.%
#端口号
port = 3306
#最大连接数
max_connections=200

5.改完后同样把从数据库注册为系统服务。
点击查看代码
mysqld install mysql-slave --defaults-file="D:\xampp\mysql-slave\bin\my.ini"

然后重启主从数据库两个服务。

image

进入主从两数据库目录的data目录下,修改auto.cnf文件,把两个uuid改的不一样就行,这里,我是把最后一位的数字进行了修改。

image

6.给主库赋予主从复制的权限:(备注:局域网这里需要注意下)
点击查看代码
以下二选一:
# 本地Mysql 同步
GRANT REPLICATION SLAVE ON *.* TO 'root'@'%' IDENTIFIED BY 'root';(主库控制台)

# 局域网Mysql同步
GRANT REPLICATION SLAVE ON *.* TO 'flood'@'172.16.10.249' IDENTIFIED BY 'Xmszps123'; (主库控制台)

然后刷新权限
点击查看代码
FLUSH PRIVILEGES;

image

然后查看主库的确认位点,下图中的File和Position要记住,后面从库配置时候要用到:
点击查看代码
show master status;

image

7.打开从库的命令窗口,依次输入以下命令:
先停止同步:
点击查看代码
STOP SLAVE;

然后配置从库指向到主库,使用上一步记录的文件名File以及位点Position:(备注:局域网这里需要注意下)
点击查看代码
以下二选一:
# 本地Mysql 同步
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=1178,MASTER_HOST='localhost',MASTER_USER='root',MASTER_PASSWORD='',MASTER_PORT=
3306;(从库控制台)

# 局域网Mysql 同步
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000004',MASTER_LOG_POS=602,MASTER_HOST='192.168.50.62',MASTER_USER='root',MASTER_PASSWORD='root',MASTER_PORT=3306;(从库控制台)

然后开启同步:
点击查看代码
START SLAVE;

image

然后查看从库的同步状态:
点击查看代码
show slave status;

Slave_IO_Runing和Slave_SQL_Runing都为Yes说明同步成功,如果不为Yes,请检查error_log。

image

PS:如果之前此从库已有主库指向 需要先执行以下命令清空:然后 重回第7步骤。
点击查看代码
STOP SLAVE IO_THREAD FOR CHANNEL '';
reset slave all;

8.这样就完成了MySQL数据库主从复制的配置了,当你在主库中对db_user数据库中的表修改数据时候,从库中db_user数据库对应表中的数据也会跟着变化了。

三、可能遇到的报错

报错一.Slave_IO_Runing和Slave_SQL_Runing有一个为No。
	1.程序可能在slave上进行了写操作
	2.也可能是slave机器重起后,事务回滚造成的.
	一般是事务回滚造成的:
解决办法:
mysql> stop slave ;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> start slave ;

四、参考博客

https://blog.csdn.net/dgfdhgghd/article/details/128427294
https://blog.csdn.net/qq_27991253/article/details/128017412

posted @ 2023-09-14 11:27  林财钦  阅读(29)  评论(0编辑  收藏  举报