实现局域网两台mysql主从复制

目前在局域网两台电脑实现mysql主从复制的测试,走了一些坑,写一些经验总结。

1.环境准备:局域网的两台windows电脑,mysql5.7安装包。下载地址:https://dev.mysql.com/downloads/installer/。

1.安装:我用的是默认安装:路径会存在C:\Program Files\MySQL\MySQL Server 5.7,安装完成后,在C:\ProgramData\MySQL\MySQL Server 5.7路径下会存在一个my.ini的文件。programData路径默认隐藏,可以在“查看”中勾选“隐藏的项目”。安装完成后在path路径加入环境变量:“C:\Program Files\MySQL\MySQL Server 5.7\bin”。

2.查看两台电脑局域网ip:测试的电脑:我的是192.168.1.101(master),192.168.1.103(slave)。

3.修改master的myini配置文件

      3.1 my.ini存在于C:\ProgramData\MySQL\MySQL Server 5.7路径下。在 [mysqld] 标签的最下面,添加如下代码:

#需要备份的数据库  
binlog-do-db=rdbc

#不需要备份的数据库  
binlog-ignore-db=mysql  

#开启二进制日志
log-bin=mysql-bin
保存退出,重启MySQL主服务器。

binlog-do-db用于指定需要同步的数据库,binlog-ignore-db指定不需要同步的数据库,如果这两个参数都不设置,则从服务器会复制主服务器的所有数据库。

注意:此步骤修改,需要管理员权限,然后用notepad++打开,notepad++可能会修改文件编码格式,导致后续service不能重新启动,还有就是notepad++所还可能会将文件头部的注释去掉然后添加一个., 一定要仔细甄别。默认的编码格式应为utf-8,所以先建议备份一份my.ini文件。

4.创建连接master的用户名和密码.管理员模式打开cmd,切换到C:\Program Files\MySQL\MySQL Server 5.7\bin目录下

    4.1 创建用户:create user 'root'@'192.168.1.103' identified by '123456';   其中root是用于slave连接master的账户,192.168.1.103是slave的ip,123456是创建连接的密码。可以设为自己的

4.2授予权限:grant replication slave on *.* to 'root'@'192.168.1.103' identified by '123456';

4.3 如果要复制的主库已经有数据,需要现将数据考到slave库中,否则不会将之前的数据更新。

//////////////////////////********不一定用得到**********//////////////////////////////

  锁表:实际应用中如果数据库还在运行,需要锁表:

如果主服务器的数据库(test)中,已经有数据,我们需要先手动把主服务器中的数据复制到从服务器。方法如下:
在本案例中,我们只备份一个数据库(rdbc),rdbc中有一个表user,表中也已经有了数据。为了防止我们复制数据的时候,数据库test中的数据发生更新,我们需要先锁定数据库,命令如下:
flush tables with read lock;
这个命令是全局读锁定,它会给主服务器中的所有数据库都加上读锁,这里顺便说一下读锁和写锁的区别:
  • read lock(读锁):也叫共享锁,允许所有的读操作,但阻塞写操作,即所有连接只可以读数据,但不允许写数据。
  • write lock(写锁):也叫排它锁、独占锁,只允许当前连接的读和写,不允许其他并发的读操作和写操作。
锁定主服务器的数据库后,我们在从服务器中,也创建一个数据库test,并将所有的表(包括表结构和表数据)都导入。
然后,我们执行下面的命令,解锁:
unlock tables;  
//////////////////////////********不一定用得到**********//////////////////////////////

5.查看master的状态:mysql> show master status;


6.从服务器配置:

   6.1在另一台电脑上,同样路径下修改my.ini文件,将server_id从1改到2.保存退出,重启service.


6.2.连接slave服务器,

mysql -uroot -p -P3306

配置复制的参数:

change master to master_host='192.168.1.101',master_user='root',master_password='123456',master_port=3306,master_log_file='mysql-bin.000002',master_log_pos=706;

参数详解:

master_host: 主服务器的IP
master_user: 主服务器上新创建的用户名
master_password: 用户的密码
master_port: 主服务器的端口,如果未曾修改,默认即可。

master_log_file: 主服务器二进制日志文件的名称,填写查看主服务器的master状态时显示的File的值

master_log_pos: 日志的位置,填写查看主服务器的master状态时显示的Position的值

6.3
启动从服务器的slave复制功能:
mysql> start slave;
查看从服务器的slave状态:
mysql> show slave status \G

如果 Slave_IO_Running 和 Slave_SQL_Running 的值都为 Yes,则说明主从复制的所有配置已成功,即从服务器已经可以自动与主服务器的数据库数据实现同步了。

6.4 如果Slave_IO_Running 的值一直为connecting则说明master的端口可能被屏蔽了,需要打开端口。

7.打开端口。如果主master的端口是不能被外网访问的话,slave是连不上的。因此需要将master的端口暴露给slave访问

7.1进入控制面板-系统和安全-Windows防火墙。选择左边栏的高级设置。


然后点入站规则。


进入入站规则后点击右边新建规则



填入3306端口


在随便填入一个名称即可。


猜你喜欢

转载自blog.csdn.net/yj310873325/article/details/80450215