windows10下搭建mysql5.7的主从同步

Posted liwenhong199404

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了windows10下搭建mysql5.7的主从同步相关的知识,希望对你有一定的参考价值。

展示:

技术图片

 

 

其中mysq-5.7.19-win64是主库  端口3306

mysql3307是从库,端口3307

 

一、安装第一款mysql5.7(mysq-5.7.19-win64)   我的是免安装版本的mysql

全部安装好后修改my.ini文件

[client]
port=3306
default-character-set=utf8
#客户端字符类型,与服务端一致就行,建议utf8
[mysqld]
port=3306
character_set_server=utf8
#服务端字符类型,建议utf8
basedir=D:\\soft\\mysql\\mysql-5.7.19-winx64
#解压根目录
datadir=D:\\soft\\mysql\\mysql-5.7.19-winx64\\data
#解压根目录data
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

#主数据库配置
server-id=1
log-bin=backup-data
#如果两个都不设的话,从服务器会复制主服务器的全部数据库
log-bin-index=backup-data.index
#表示开启二进制日志,并把二进制日志前缀改为backup-data
#数据库备份文件
binlog-do-db=study
#表示需要备份的数据库为test
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
binlog-ignore-db=shiro
#表示不需要备份的数据库为mysql
[WinMySQLAdmin]
D:\\soft\\mysql\\mysql-5.7.19-winx64\\binmysqld.exe 
#解压根目录inmysqld.exe

关闭mysql服务,默认服务名为MySQL

技术图片

 

 将mysq-5.7.19-win64复制一份更名为mysql3307

技术图片

 

二、安装第二款mysql5.7(mysql3307)

2.1、修改mysql3307下的my.ini文件

[client]
port=3307
default-character-set=utf8
#客户端字符类型,与服务端一致就行,建议utf8
[mysqld]
port=3307
character_set_server=utf8
#服务端字符类型,建议utf8
basedir=D:\\soft\\mysql\\mysql3307
#解压根目录
datadir=D:\\soft\\mysql\\mysql3307\\data
#解压根目录data

#从数据库配置
server-id=2
relay-log-index=chongli-relay-bin.index
relay-log=chongli-relay-bin

2.2、安装

1.管理员打开cmd.exe,进入mysql3307的bin目录下执行

     mysqld --install MySQL3307 --defaults-file="D:softmysqlmysql-5.7.19-twomy.ini"        #安装MySQL3307服务

   技术图片

 

2.注册表修改

 windows+R  调取运行框,输入regedit打开注册表,修改

  HKEY_LOCAL_MACHINE-->SYSTEM-->CurrentControlSet-->Services-->MySQL/MySQL3307

  与

  HKEY_LOCAL_MACHINE-->SYSTEM-->ControlSet001-->Services--> MySQL/MySQL3307

  下的ImagePath属性

修改为:

D:softmysqlmysql-5.7.19-winx64inmysqld --defaults-file=D:softmysqlmysql-5.7.19-winx64my.ini MySQL    #MySQL服务明确指定使用的配置文件my.ini

D:softmysqlmysql-5.7.19-winx64inmysqld --defaults-file=D:softmysqlmysql3307my.ini MySQL3307           #MySQL3307服务明确指定my.ini

 3.启动MySQL3307服务,登录mysql验证是否安装成功。

4.启动MySQL服务,登录mysql验证mysql主从数据库服务能否同时启动  以及各自端口号是否错乱。

  mysql -uroot -p密码 -P端口号   (端口号对应的P大写)

 

三、其他修改项

  经过实际搭建过程中,发现了几点问题,在前面进行展示,如果想直接跨过这个坑,可以跳到第四步

  1.为注册表配置,该坑第二步已经跨过,此处展示未跨过情形

  该命名执行成功后:mysqld --install MySQL3307 --defaults-file="D:softmysqlmysql3307 my.ini"  ,按照我的理解应该就是指定了使用哪里的my.ini配置文件

  我删除mysql3307目录下的data目录,通过初始化命令重新生成data目录

  mysqld --initialize --user=mysql3307 --console  //出现两种情况

  第一种:执行失败   提示data文件已经存在(其实它就是使用了mysq-5.7.19-win64下的my.ini)

  第二种:执行成功  导致MySQL3307与MySQL服务不能同时启动,端口也会错乱(原因就是端口冲突:MySQL3307与MySQL服务其实就是同一个,只是名字不一样)

  解决:修改注册表  再删除mysql3307下的data  重新执行mysqld --initialize --user=mysql3307 --console

 

  2.uuid不可一样:一样会导致主从同步时 Slave_IO_Running: NO

  解决:data目录下的auto.cnf文件中修改uuid的值

       技术图片

 

 

  3.创建用户错误:会导致主从同步时 Slave_IO_Running: Connecting(说明从库没有连上主库)

  错误重现:因为我很早以前学习搭建主从同步的时候执行过,不过最后失败了也就没管

create user ‘chongli‘@‘%‘ IDENTIFIED BY ‘199404‘;    #创建用户

GRANT REPLICATION SLAVE ON *.* TO ‘chongli‘@‘%‘;   #分配权限

flush privileges;                                    #刷新权限

   现在我执行的是:

create user ‘chongli‘@‘%‘ IDENTIFIED BY ‘chongli‘;    #创建用户 执行不成功

所以我换成了

create user ‘chongli‘@‘127.0.0.1‘ IDENTIFIED BY ‘chongli‘;     #执行成功   %与127.0.0.1差别导致问题出现

GRANT REPLICATION SLAVE ON *.* TO ‘chongli‘@‘%‘;   #分配权限

flush privileges;                                    #刷新权限

  验证该错误方法:

  登录主库:查看复制用户的权限

      技术图片

 

      技术图片

 

   当权限显示为REPLICATION是方才正确,‘chongli‘@‘127.0.0.1‘权限不对

     解决:修改权限

     技术图片

 

 

四、主从同步搭建

   1.登录主库

    mysql -uroot -p密码 -P3306

   2.登录从库

    mysql -uroot -p密码 -P3307

   3.查看主库从库状态

 show master status;                   #登录主库  查看主库master的状态

技术图片

show slave statusG                     #登录从库  查看从库slave的状态

技术图片

   

   4.主库master中创建一个用户与从库slave同步

 

create user ‘chongli‘@‘127.0.0.1‘ IDENTIFIED BY ‘chongli‘;     #创建用户

GRANT REPLICATION SLAVE ON *.* TO ‘chongli‘@‘127.0.0.1‘;   #分配权限

flush privileges;                                    #刷新权限

   5.切换到从库,将主库与从库通过新创建的用户联系起来

change master to master_host=‘127.0.0.1‘,master_port=3306,master_user=‘chongli‘,master_password=‘chongli‘,master_log_file=‘backup-data.000015‘,master_log_pos=154;                                  #master_log_file 对应3中主库状态的File   master_log_pos对应3中主库状态的Position

   6.主表加锁:为了防止我们复制数据到从库的时候,主表数据库study中的数据发生更新(这一步我省略了:本地搭建学着玩的)此处更好是只锁study数据库,因为我们只是同步了study,而不是全局锁

flush tables with read lock;             #锁定数据库

这个命令是全局读锁定,它会给主服务器中的所有数据库都加上读锁

read lock(读锁):也叫共享锁,允许所有的读操作,但阻塞写操作,即所有连接只可以读数据,但不允许写数据。 
write lock(写锁):也叫排它锁、独占锁,只允许当前连接的读和写,不允许其他并发的读操作和写操作。 
锁定主服务器的数据库后,我们在从服务器中,也创建一个数据库test,并将所有的表(包括表结构和表数据)都导入。 
然后,我们执行下面的命令,解锁: 
unlock tables;                      #解锁

   7.从库中开启同步

   start slave;              #开启同步

        技术图片

 

   8.查看从库状态,验证是否开启主从同步

        技术图片

 

   Slave_IO_Running与Slave_SQL_Running都为Yes证明搭建同步成功,也可以去主库增删改数据验证从库效果。

   

 

以上是关于windows10下搭建mysql5.7的主从同步的主要内容,如果未能解决你的问题,请参考以下文章

mysql5.7搭建主从同步

win7本机上搭建两个MySQL5.7实现主从同步复制

mysql5.7 主从复制简单环境搭建以及开启半同步复制等配置

mysql5.7 主从复制简单环境搭建以及开启半同步复制等配置

mysql5.7 主从复制简单环境搭建以及开启半同步复制等配置

MySQL5.7主从环境自动同步脚本