mysql主从配置的流程大体如下:
1)master会将变动记录到二进制日志里面;
2)master有一个I/O线程将二进制日志发送到slave;
3) slave有一个I/O线程把master发送的二进制写入到relay日志里面;
4)slave有一个SQL线程,按照relay日志处理slave的数据;
按照原理,我们开启mysql主从复制,大体需要做以下操作:
1)开启master的二进制日志
2)开启slave的二进制日志
3)将slave指向master
4)开始复制
我这里的安装环境是VMware上一台虚拟机有mysql然后克隆出来第二台,但最好不要克隆,分别建两台虚拟机。
保证两台虚拟机上的MySQL版本一致。
关掉防火墙
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
配置主服务器
1.打开mysql的配置文件在 /etc/my.cnf
添加下面模块
[mysqld]
idserver_id = 1 #设置服务器
log-bin=mysql-bin #指定日志
本次配置用以上两个就可以
————————————————————————————
以下根据实际情况添加
#位置、语句 和自动选择(mixed)
binlog_format=mixed
log-bin-index=master-bin.index
binlog-do-db = tycp-dev #要同步的数据库
binlog-ignore-db = mysql #不同步的数据库
expire_logs_days = 7 #定时清除的时间
max_binlog_size = 215M #日志大小
————————————————————————————————
重启MySQL
编译安装mysql重启方法:
将mysql安装目录下的mysql启动文件复制一份出来
cp /usr/local/mysql/bin/mysql /etc/init.d/mysqld
/etc/init.d/mysqld restart/start/stop #重启/启动/停止mysql
二进制安装的MySQL可以用systemctl 命令重启:
systemctl restart mysql #重启mysql
创建用户
CREATE USER ‘lqqslave’@’%’ IDENTIFIED WITH mysql_native_password BY ‘123456’;
赋予权限
GRANT REPLICATION SLAVE ON . TO ‘lqqslave’@’%’;
#生效 flush privileges 命令本质上的作用是将当前user和privilige表中的用户信息/权限设置从mysql库(MySQL数据库的内置库)中提取到内存里
flush privileges;
#显示当前master状态 , file 和 position 从库配置使用
show master status;
±-----------------±---------±-------------±-----------------±------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
±-----------------±---------±-------------±-----------------±------------------+
| mysql-bin.000001 | 1605 | | | |
±-----------------±---------±-------------±-----------------±------------------+
master 到此配置完毕
配置从服务器
打开mysql的配置文件在 /etc/my.cnf
添加下面模块
[mysqld]
idserver_id = 2 #设置从服务器ID 主从服务器ID必须保证不一样
重启mysql,登陆
设置master
#注意主master关闭防火墙或者开放3306端口
change master to
master_host=‘10.0.30.121’,
master_user=‘lqqslave’,
master_password=‘123456’,
master_log_file=‘mysql_bin.000001’,
master_log_pos=1605;
启动slave
start/stop/reset slave; 启动/停止/重置slave
查看slave状态
Show slave status\G
看到下面两个yes表示启动成功
#Slave_IO_Running: Yes
#Slave_SQL_Running: Yes
我这里是克隆出来的数据库一个是conneting 一个是no
此时要去看下面的报错(下图是正确的配置,看框起来地方的报错提示)
有一个报错是主从UUID相同,在/usr/loca,l/mysql/data/auto.cnf修改UUID 随便改一个之后 重启mysql登陆 在启动slave 查看状态:
Slave_SQL_Running: No
此时 可以用这个解决办法:
mysql> slave stop;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> slave start;
这样两个就都是yes了
可以去master测试了,比如在master创建个用户以供远程链接使用
创建用户
CREATE USER ‘hizamaru’@’%’ IDENTIFIED WITH mysql_native_password BY ‘123456’;
设置所有权限
GRANT ALL PRIVILEGES ON . TO ‘hizamaru’@’%’;
#授权基本的查询修改权限,按需求设置
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER ON . TO ‘hizamaru’@’%’;
从库也会自动创建用户,并设置权限
搭建主主同步(更改从节点为主节点)
vim /etc/my.cnf
log-bin=mysql-bin #二进制文件存放路径
添加bin log配置,MySQL8.0 默认是开启bin log的
重启服务
从节点创建复制用户
创建用户
CREATE USER ‘lqqslave’@’%’ IDENTIFIED WITH mysql_native_password BY ‘123456’;
赋予权限
GRANT ALL PRIVILEGES ON . TO ‘lqqslave’@’%’;
#生效 flush privileges 命令本质上的作用是将当前user和privilige表中的用户信息/权限设置从mysql库(MySQL数据库的内置库)中提取到内存里
flush privileges;
#显示当前master状态 , file 和 position 从库配置使用
show master status;
±--------------±---------±-------------±-----------------±------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
±--------------±---------±-------------±-----------------±------------------+
| binlog.000027 | 824 | | | |
±--------------±---------±-------------±-----------------±------------------+
主节点设置master
#注意主master关闭防火墙或者开放3306端口
change master to
master_host=‘10.0.30.122’,
master_user=‘lqqslave’,
master_password=‘123456’,
master_log_file=‘binlog.000027’,
master_log_pos=824;
启动slave
start slave
查看状态
show slave status\G