服务器防火墙和服务器安全组需要提前放开端口默认3306
主库配置
systemctl status mysqld //查看MySQL状态
1、修改 /etc/my.cnf 的配置
//mysql服务id,保证整个集群环境中唯一,取值范围:1 - 2的32次方 -1,默认值为1
server-id = 1
//是否只读,1标识只读,0标识读写
read-only = 0
//忽略的数据,指不需要同步的数据库
#binlog-ignore-db=mysql
//指定同步的数据库
#binlog-do-db=`数据库名称`
2、systemctl restart mysqld //重启MySQL
查看是否MySQL启动成功
3、登录mysql,创建远程连接的账号,并授予主从复制权限
#创建itcast用户,并设置密码,该用户可在任意主机连接该MySQL服务
#默认密码复杂程度为大小写+特殊字符+数字
CREATE USER 'itcast'@'%' IDENTIFIED WITH mysql_native_password BY 'Root@123456';
#为'itcast'@'%' 用户分配主从复制权限
GRANT REPLICATION SLAVE ON *.* TO 'itcast'@'%';
#刷新权限
flush privileges;
4、通过指令,查看二进制日志坐标
show master status;
file:从哪个日志文件开始推送日志文件
position:从哪个位置开始推送日志
binlog_ignore_db:指定是否需要同步的数据库
从库:
1、修改 /etc/my.cnf 的配置
server-id = 2
read-only = 1
2、systemctl restart mysqld //重启MySQL
查看是否MySQL启动成功
3.登录mysql,设置主库配置
CHANGE REPLICATION SOURCE TO SOURCE_HOST='127.0.0.1', SOURCE_USER='itcast', SOURCE_PASSWORD='Root@123456', SOURCE_LOG_FILE='mysql-bin.000006',SOURCE_LOG_POS=664;
上述是8.0.23中的语法。如果mysql是8.0.23之前的版本,执行如下SQL:
CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_USER='itcast', MASTER_PASSWORD='Root@123456', MASTER_LOG_FILE='mysql-bin.000006', MASTER_LOG_POS=664;
指令解析:
SOURCE_HOST 或 MASTER_HOST :主库IP地址
SOURCE_USER 或 MASTER_USER :连接主库的用户名
SOURCE_PASSWORD 或 MASTER_PASSWORD:连接主库的密码
SOURCE_LOG_FILE 或 MASTER_LOG_FILE:读取主库的binlog二进制文件
SOURCE_LOG_POS 或 MASTER_LOG_POS:读取主库的binlog二进制文件的位置
4、开启同步操作
start replica; #8.0.22之后
start slave; #8.0.22之前
5、查看主从同步状态
show replica status\G; #8.0.22之后
show slave status\G; #8.0.22之前
若出现slave_io_running: connecting查看:
1、网络不通
2、密码不对
3、pos不对
测试:
show databases; //查看当前数据库
create database db01;
create table t_user(
id int(11) primary key not null auto_increment,
name varchar(50) not null,
sex varchar(1)
)engine=innodb default charset=utf8mb4;
insert into t_user(name,sex) values('tom','1'),('min','1'),('max','0');
show tables;
关闭主从复制:
从库:
stop replica;//停止主从复制
reset replica; //清除复制配置
主库:
STOP REPLICA IO_THREAD; //停止复制线程