1.选用版本
官网一般提供两种包
mysql-8.0.21-winx64.zip免安装版
mysql-installer-community-8.0.21.0.msi安装版
这里我选用免安装版
最新包请去官网下载
https://dev.mysql.com/downloads/mysql/https://dev.mysql.com/downloads/windows/installer/8.0.html
2.搭建环境
这里我使用两台Win10虚拟机进行搭建
(1)其中一台
10.6.10.250
(2)剩下一台
10.6.10.251
(3)在MySQL免安装包根目录下(这里即C:\mysql-8.0.21-winx64\bin目录上一级)创建my.ini配置文件
主机(10.6.10.250)
[mysqld]
log-bin=mysql-bin
relay_log=mysql-relay-bin
log-slave-updates=on //从表将同步数据写入自身bin文件
binlog_format=mixed //同时开启SBR和RBR两种记录模式(MBR模式)
auto-increment-offset=1 //双主建议开启,防止主键冲突
auto-increment-increment=2 //双主建议开启,防止主键冲突
server-id=1
basedir=C:\mysql-8.0.21-winx64\
datadir=C:\mysql-8.0.21-winx64\data\
port=3306
从机(10.6.10.251)
[mysqld]
log-bin=mysql-bin
relay_log=mysql-relay-bin
log-slave-updates=on
binlog_format=mixed
auto-increment-offset=2 //双主建议开启,防止主键冲突
auto-increment-increment=2 //双主建议开启,防止主键冲突
server-id=2
basedir=C:\mysql-8.0.21-winx64\
datadir=C:\mysql-8.0.21-winx64\data\
port=3306
(4)管理员启动命令行
mysqld --initialize-insecure --user=mysql //会在data目录下创建文件
mysqld -install
net start mysql
mysql -uroot -p
use mysql;
alter user 'root'@'localhost' identified with mysql_native_password BY '123456';
flush privileges;
exit;
*其他
net stop mysql
mysql -remove
3.首先创建用于同步的用户
create user 'slave'@'%' identified with mysql_native_password by 'slave'; //创建同步用户
*这里两台服务器可以分别创建各自的用户比如:第一台slave1,第二台slave2,因为下面赋权限时,如果是给所有数据库赋权限,则该用户也会被同步,则第一台创建好后在第二台服务在创建相同用户时,会报错。
grant replication slave on *.* to 'slave'@'%'; //给用户赋权限
*这里可以考虑只将特定库的所有表用于该用户同步:grant replication slave on mr_rcs.* to 'slave'@'%';
flush privileges; //刷新权限缓存use mysql;
select * from user where User='slave'; //查看新建用户状态是否正确
4.查看自身当前bin-log日志信息
flush tables with read lock; //锁表写权限,当前只读
show master status; //查看日志状态
5.指定同步规则
unlock tables; //解锁表写权限
stop slave; //停止同步服务
reset slave; //删除原先保存在主表和中继表中的数据slave_master_info ,slave_relay_log_info
假设当前是第二台服务器,则
change master to master_host='10.6.10.250',master_user='slave1',master_password='slave',master_log_file='mysql-bin.000002',master_log_pos=1173; //第一台服务器IP地址为10.6.10.250,本地同步用户slave1,第一台服务器的日志文件,最新日志记录行数
//反之,如果当前是第一台服务器,则
change master to master_host='10.6.10.251',master_user='slave2',master_password='slave',master_log_file='mysql-bin.000002',master_log_pos=1173;
6.开启同步
start slave IO_THREAD; //开启读写线程
start slave SQL_THREAD; //开启sql同步线程
stop slave;
set global sql_slave_skip_counter=1;
start slave;
show slave status; //查看同步状态
*上述所有操作完成后查看同步状态有几个重要指标,如果状态正确则表示同步建立成功,并且状态已经同步
Slave_IO_Running:Yes
Slave_SQL_Running:Yes //如果是No,一般是在该台服务器上执行了写操作或者机器重起(mysql服务重启),事务回滚造造成
Seconds_Behind_Master:0
如果状态不对:
可重复执行第5、6两步骤
7.
show processlist; //查看用户进程状态
喜欢秋天温暖的阳光和一杯沁人心脾的下午茶~