隐藏

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

发布:2023/4/16 16:57:56作者:管理员 来源:本站 浏览次数:379

[WinMySQLAdmin] D:\\soft\\mysql\\mysql-5.7.19-winx64\\bin\mysqld.exe #解压根目录\bin\mysqld.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:\soft\mysql\mysql-5.7.19-two\my.ini"        #安装MySQL3307服务


  技术图片




2.注册表修改


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


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



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


下的ImagePath属性


修改为:


D:\soft\mysql\mysql-5.7.19-winx64\bin\mysqld --defaults-file=D:\soft\mysql\mysql-5.7.19-winx64\my.ini MySQL    #MySQL服务明确指定使用的配置文件my.ini


D:\soft\mysql\mysql-5.7.19-winx64\bin\mysqld --defaults-file=D:\soft\mysql\mysql3307\my.ini MySQL3307           #MySQL3307服务明确指定my.ini


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


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


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




三、其他修改项


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


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


该命名执行成功后:mysqld --install MySQL3307 --defaults-file="D:\soft\mysql\mysql3307 \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 status\G                     #登录从库  查看从库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证明搭建同步成功,也可以去主库增删改数据验证从库效果。