mysql主从同步

我是在同一台windows安装的两个mysql服务。

1.首先正常安装第一份mysql,默认端口是3306;

2.复制一份文件到另外的路径下(建议使用不同的磁盘)

3.然后修改里面的配置文件,例如

[client]
default-character-set=utf8mb4
port=3307
[mysqld]
basedir=E:mysql-5.7.25-winx64
datadir=E:mysql-5.7.25-winx64data
port=3307

character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
[mysql]
default-character-set=utf8mb4

我把从库的端口设置为3307,安装到E盘;主库安装到D盘的。

4.在cmd中执行以下命令,安装服务

mysqld install mysql2  --defaults-file="E:mysql-5.7.25-winx64/my.ini"

5.修改注册表的服务路径,不然启动的还是mysql 3306的服务

在cmd中运行regedit进入注册表管理

找到

HKEY_LOCAL_MACHINE-->SYSTEM-->CurrentControlSet-->Services

里面有刚刚创建的mysql2服务

最后修改下红框的路径即可,一般只需修改前面的。

 至此,两个mysql服务已经完成。接下来就是配置主从同步。

一:修改主库配置文件

[client]
default-character-set=utf8mb4
[mysqld]
basedir=D:mysql-5.7.25-winx64
datadir=D:mysql-5.7.25-winx64data
port=3306

character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB

# 主库配置

server-id = 1

binlog-do-db = hangfiretest #要同步的数据库

#binlog-ignore-db = mysql   #不同步的数据库,如果指定了binlog-do-db这里应该可以不用指定的

log-bin = mysql-bin #要生成的二进制日记文件名称


[mysql]
default-character-set=utf8mb4

主库配置如上。

二:修改从库配置文件

[client]
default-character-set=utf8mb4
port=3307
[mysqld]
basedir=E:mysql-5.7.25-winx64
datadir=E:mysql-5.7.25-winx64data
port=3307

character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB

# 从库配置
server-id=2
#要同步的数据库
replicate-do-db = hangfiretest 
#不同步的数据库,如果指定了binlog-do-db这里应该可以不用指定的
#binlog-ignore-db = mysql   
#要生成的二进制日记文件名称
log-bin = mysql-bin 
[mysql]
default-character-set=utf8mb4

其中要注意server-id不能相同。

三:配置主库新用户,只具有同步的权限

create user 'repl'@'127.0.0.1' identified by 'admin';
GRANT REPLICATION SLAVE ON *.* TO 'rep'@'127.0.0.1'; 
//这里可以指定具体数据库(hangfiretest.*) 我这里是指定的全部数据库权限
//例如GRANT REPLICATION SLAVE ON hangfiretest.* TO 'rep'@'127.0.0.1'; 

四:准备备份主库数据库

保持主从mysql的hangfiretest数据库初始状态一致
一般是先将所有的表加锁(只读),然后copy磁盘上的数据库文件夹。我这里直接停止服务,然后将数据文件拷贝过去

你也可以通过Navicat直接备份一个,然后还原过去。

然后在主数据库里面运行show master statusG(注意有G后面不加;,否则报错<no query specified>) 记下file和position字段对应的参数

五:在从库设置它的master

同样cmd在mysql从服务 bin目录执行

E:mysql-5.7.25-winx64in>mysql -uroot -padmin

然后执行

change master to master_host='127.0.0.1', master_port=3306, master_user='rep', master_password='admin', master_log_file='mysql-bin.000001', master_log_pos=609;

 注意:master_port对应主库的端口,master_log_file和master_log_pos对应刚才show master status记下的参数。

六:在从库开启从数据库复制功能

start slave; (mysql5.5是slave start;启动)
在从库可以通过show slave statusG来查看一些参数。

发现红框是运行的就ok。

如果第一个未运行可以参考:https://www.jb51.net/article/39935.htm

最后测试是否成功;左图为主库,右图为从库

大部分参考至https://www.jianshu.com/p/0d07b446ae33

原文地址:https://www.cnblogs.com/FateHuli/p/11027652.html