既然要搭建一套主和备,那么必定是两个进程,接下来我们要做的是如何在一台机器上安装两个MySQL,然后将它们的链路建立起来。主实例的端口为3006,备实例的端口为3007,安装在D盘。
安装MySQL
M(master)的安装
在windows平台,我们使用msi安装包即可,下载地址 ,大约350M左右,mysql-installer-community-5.7.19.0.msi。安装过程中选择custom方式安装MySQL-server。
目录设置:D:\Program Files\MySQL\MySQL Server 5.7-M
数据目录设置:目录设置:D:\ProgramData\MySQL\MySQL Server 5.7-M
端口设置:3306
windows服务名称:MySQL-M
设置root密码,完成。这样,我们就完成了主实例的安装,接下来拷贝配置信息到备实例。
S(slave)的安装
直接使用安装包安装是禁止的,我们可以使用拷贝的方式将安装目录、数据目录重新拷贝一份。注意所有M相关的信息都被替换为了S。
目录设置:D:\Program Files\MySQL\MySQL Server 5.7-S
数据目录设置:目录设置:D:\ProgramData\MySQL\MySQL Server 5.7-S
端口设置:3307
windows服务名称:MySQL-S
这样基础文件就已经搞定了。S的windows服务需要单独处理,在“开始”中输入regedit,打开注册表。windows的服务信息在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services下,找到M的服务名称“MySQL-M”,然后右键-导出,将此项注册表导出来,然后使用notepad等文本编辑器将里面所有M相关的都替换为S,然后双击执行将修改过的注册表项目添加到注册表,这样我们就看到了新的注册项“MySQL-S”,由于项“ImagePath”无法直接在编辑器中编辑,我们就在这里右键-修改该数据,将路径中所有M相关的都设置为S。注销windows,打开“服务”,就可以看到现在有两个服务:MySQL-M、MySQL-S。
此时,我们还没有对实例进行配置,不能启动MySQL服务或启动将失败。
配置MySQL
M(master)的配置
MySQL的配置都在my.ini中,Linux下位my.conf,默认在数据目录下。配置该目录的目的是为了将主/备区分开来,例如端口号这种基本配置,以下为需要区别配置的内容。
#增加
log-bin=mysql-bin
#server-id 主和备不能相同,必须区分开来。
server-id=123456789
#数据目录根据不同的实例角色进行修改
datadir=XXXXX
S(slave)的配置
同上。
如果要部署 M->S1->S2这样的架构,那么需要S1上开启binlog更新,在配置文件中增加配置项:
#开启备库日志记录
log_slave_updates
请注意,数据目录下有个文件auto.cnf,和GTID有关系,一定注意要像server-id一样区别开来,建议直接删除掉,重启服务后将会重新生成。
以上,主备实例初始化OK。
#启动两个服务
net start MySQL57-M
net start MySQL57-S
配置主备链路
接下来,要做四件事:授权主备复制专用账号、确认M位点、修改S指向到M、检查链路。
#M上执行 授权同步账号
GRANT REPLICATION SLAVE ON *.* TO 'db_sync'@'%' IDENTIFIED BY 'db_sync';
#M上确认位点 记录下文件名以及位点
show master status;
#假设文件为mysql-bin.000001 位点为154。后面要用。
#S上执行指向切换
CHANGE MASTER TO
master_host = 'localhost',
master_user = 'db_sync',
master_password = 'db_sync',
master_log_file = 'mysql-bin.000001',
master_log_pos = 154;
#注意 如果之前此备库已有主库指向 需要先执行以下命令清空
STOP SLAVE IO_THREAD FOR CHANNEL ''
#S上执行
show slave status;
#确认Slave_IO_Runing以及Slave_SQL_Runing两个状态位是否为“Yes”,如果不为Yes,请检查error_log,然后排查相关异常。
建议备库上执行set GLOBAL read_only=1设置其为只读。
这样主备链路就完成了。可以create database试一下,两个实例就会立即出现效果啦。