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-winx64in目录上一级)创建my.ini配置文件
[mysqld]
log-bin=mysql-bin
server-id=2 //注意两台服务器上的server id 绝对不能相同
basedir=C:mysql-8.0.21-winx64
datadir=C:mysql-8.0.21-winx64data
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; //停止同步服务
假设当前是第二台服务器,则
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; //查看用户进程状态