mysql 主从
一般不会在一台服务器上启动两个docker做主从,因为服务器一挂,两个容器都挂了
192.168.59.102 mysql1 master
192.168.59.103 mysql2 slave
1、安装mysql
本次使用docker 安装mysql
#docker run -p 3312:3306 --name mysql1 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.29
#docker run -p 3306:3306 --name mysql2 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.29
2、开启mysql1和mysql2的navicat访问
>use mysql;
>UPDATE user SET HOST = '%' WHERE USER ='root';
失败,查看user表
>select host,user,plugin from user;
root的host已经是%,跳过
>ALTER user 'root'@'%' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;
>ALTER user 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
>FLUSH PRIVILEGES;
3、配置master
选择mysql1作为master
登录容器mysql1
修改文件 /etc/mysql/my.cnf
添加以下信息
log-bin=master-bin
server-id=1】
登录mysql1的数据库
给mysql2(slave)配置一个用户名/密码和权限
#创建一个slave1密码123456的用户,
#踩坑记录:建议是'slave1'@'%',问题没有找到,就是连接不上master。在从服务器上登录slave1的账号是可以登陆,但slave启动连接失败。
mysql> create user 'slave1'@'192.168.59.103' identified by '123456';
#给slave1分配权限,所有数据库.所有表
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave1'@'192.168.59.103';
#查看slave1的权限
mysql>show grants for 'slave1'@'192.168.59.103';
重启mysql服务
再登录数据库查看master状态
mysql> show master status;
注意:master-bin.000001和157,slave配置用到
4、配置slave
选择mysql2作为slave
登录容器mysql2
修改文件 /etc/mysql/my.cnf
添加以下信息
log-bin=relay-bin
server-id=2】
登录mysql2的数据库,将slave指向master
mysql>CHANGE MASTER TO
>MASTER_HOST='master所在服务器的IP',
>MASTER_USER='master授权的账号',
>MASTER_PASSWORD='master授权的密码',
>MASTER_PORT=master端口号,
>MASTER_LOG_FILE='master的日志文件名',
>MASTER_LOG_POS=master的日志所在位置;
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
mysql>CHANGE MASTER TO
>MASTER_HOST='192.168.59.102',
>MASTER_USER='slave1',
>MASTER_PASSWORD='123456',
>MASTER_PORT=3312,
>MASTER_LOG_FILE='master-bin.000001',
>MASTER_LOG_POS=157;
启动slave
mysql>start slave;
查看slave
mysql>show slave status\G;
两个都为Yes,启动成功
验证:(192.168.59.102和192.168.59.103需要同步的数据库.表要一样的结构)
在192.168.59.102上插入一条信息
192.168.59.103同时同步到一条记录