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、开启mysql1mysql2的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.000001157,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.102192.168.59.103需要同步的数据库.表要一样的结构)

 在192.168.59.102上插入一条信息

192.168.59.103同时同步到一条记录