实现局域网两台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用于指定需要同步的数据库,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库中,否则不会将之前的数据更新。
//////////////////////////********不一定用得到**********//////////////////////////////
锁表:实际应用中如果数据库还在运行,需要锁表:
- read lock(读锁):也叫共享锁,允许所有的读操作,但阻塞写操作,即所有连接只可以读数据,但不允许写数据。
- write lock(写锁):也叫排它锁、独占锁,只允许当前连接的读和写,不允许其他并发的读操作和写操作。
5.查看master的状态:mysql> show master status;
6.从服务器配置:
6.1在另一台电脑上,同样路径下修改my.ini文件,将server_id从1改到2.保存退出,重启service.
6.2.连接slave服务器,
mysql -uroot -p -P3306
配置复制的参数:
master_host: 主服务器的IP
master_user: 主服务器上新创建的用户名
master_password: 用户的密码
master_port: 主服务器的端口,如果未曾修改,默认即可。
master_log_file: 主服务器二进制日志文件的名称,填写查看主服务器的master状态时显示的File的值
master_log_pos: 日志的位置,填写查看主服务器的master状态时显示的Position的值
如果 Slave_IO_Running 和 Slave_SQL_Running 的值都为 Yes,则说明主从复制的所有配置已成功,即从服务器已经可以自动与主服务器的数据库数据实现同步了。
6.4 如果Slave_IO_Running 的值一直为connecting则说明master的端口可能被屏蔽了,需要打开端口。
7.打开端口。如果主master的端口是不能被外网访问的话,slave是连不上的。因此需要将master的端口暴露给slave访问
7.1进入控制面板-系统和安全-Windows防火墙。选择左边栏的高级设置。
然后点入站规则。
进入入站规则后点击右边新建规则
填入3306端口
在随便填入一个名称即可。