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 主从复制简单环境搭建以及开启半同步复制等配置
mysql5.7 主从复制简单环境搭建以及开启半同步复制等配置