mysql一主两从配置

需要提前准备三台服务器(这里使用虚拟机代替
虚拟机中安装MySQL5.7

Centos 7.6 安装MySQL 5.7 请参考:https://blog.csdn.net/qq_2662385590/article/details/124773625?spm=1001.2014.3001.5501

master主服务器的配置

#[必须]主服务器唯一ID
server-id=1
#[必须]启用二进制日志,指名路径。比如:自己本地的路径/log/mysqlbin
log-bin=mysql-bin
#[可选] 0(默认)表示读写(主机),1表示只读(从机)
read-only=0
#设置日志文件保留的时长,单位是秒
binlog_expire_logs_seconds=6000
#控制单个二进制日志大小。此参数的最大和默认值是1GB
max_binlog_size=200M
#[可选]设置不要复制的数据库
binlog-ignore-db=test
#[可选]设置需要复制的数据库,默认全部记录。比如:binlog-do-db=atguigu_master_slave
binlog-do-db=需要复制的主数据库名字
#[可选]设置binlog格式
binlog_format=STATEMENT

打开配置文件修改conf

vim /etc/my.cnf

在 [mysqld] 后面换行追加配置,保存并退出

[mysqld]
#[必须]主服务器唯一ID
server-id=1
#[必须]启用二进制日志,指名路径。比如:自己本地的路径/log/mysqlbin
log-bin=mysql-bin
#[可选]设置需要复制的数据库,默认全部记录。比如:binlog-do-db=atguigu_master_slave
binlog-do-db=testms
#[可选]设置binlog格式
binlog_format=STATEMENT

bind-address=0.0.0.0
port=3306
user=mysql
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
log-error=/usr/local/mysql/data/mysql.err
pid-file=/usr/local/mysql/data/mysql.pid
#character config
character_set_server=utf8mb4
symbolic-links=0
explicit_defaults_for_timestamp=true

重启mysql服务

创建从服务器的用户和权限

需要进入mysql中,我们在主服务器上创建一个用户并且赋予一定权限。

如果数据库是MySQL5.7使用下面一条命令:

#在主机MySQL里执行授权主从复制的命令
GRANT REPLICATION SLAVE ON *.* TO 'slave1'@'从机器数据库IP或者%' IDENTIFIED BY 'abc123';

如果使用的是MySQL8,需要如下的方式建立账户,并授权slave,需要下面命令:

CREATE USER 'slave1'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'slave1'@'%';
#此语句必须执行。否则见下面。
ALTER USER 'slave1'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
flush privileges;

我这里是使用mysql5.7的命令
mysql一主两从配置_第1张图片
查看赋予的权限:

show grants for 'slave1'@'%';

mysql一主两从配置_第2张图片

查看主服务器状态

查看服务器的状态命令:

show master status;

mysql一主两从配置_第3张图片

slave从服务器的配置

#[必须]从服务器唯一ID
server-id=2
#[可选]启用中继日志
relay-log=mysql-relay

打开配置文件修改conf

vim /etc/my.cnf

在 [mysqld] 后面换行追加配置,保存并退出


[mysqld]
#[必须]从服务器唯一ID
server-id=2
#[可选]启用中继日志
relay-log=mysql-relay

bind-address=0.0.0.0
port=3306
user=mysql
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
log-error=/usr/local/mysql/data/mysql.err
pid-file=/usr/local/mysql/data/mysql.pid
#character config
character_set_server=utf8mb4
symbolic-links=0
explicit_defaults_for_timestamp=true

重启mysql服务

连接master主服务器

从机上复制主机的命令

CHANGE MASTER TO
MASTER_HOST='主机的IP地址',
MASTER_USER='主机用户名',
MASTER_PASSWORD='主机用户名的密码',
MASTER_LOG_FILE='mysql-bin.具体数字',
MASTER_LOG_POS=具体值;

举例如下:(一般都是更具这个稍微修改就可以使用)

CHANGE MASTER TO MASTER_HOST='192.168.100.140',MASTER_USER='slave1',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=431;

如果以前自己做过,在执行CHANGE MASTER TO MASTER_HOST=‘192.168.100.140’,MASTER_USER=‘slave1’,MASTER_PASSWORD=‘123456’,MASTER_LOG_FILE=‘mysql-bin.000002’,MASTER_LOG_POS=431;的时候,可能会报错,
mysql一主两从配置_第4张图片

启动slave同步

START SLAVE;

在这里插入图片描述
可能会报错信息:
在这里插入图片描述
可以执行如下操作,删除之前的relay_log信息。然后重新执行 CHANGE MASTER TO …语句即可。

mysql> reset slave; #删除SLAVE数据库的relaylog日志文件,并重新启用新的relaylog文件

接着,查看同步状态:

SHOW SLAVE STATUS\G;

mysql一主两从配置_第5张图片

上面两个参数都是Yes,则说明主从配置成功!

搭建主从复制的注意事项

  1. 主从机都关闭防火墙(要不然无法通信,无法复制bin log日志)
  2. 搭建完主从,再去创建数据库(要不然创建数据库的语句服务复制)
  3. 在连接master主服务器的时候,如果以前自己做过,在执行CHANGE MASTER TO MASTER_HOST=‘192.168.100.140’,MASTER_USER=‘slave1’,MASTER_PASSWORD=‘123456’,MASTER_LOG_FILE=‘mysql-bin.000002’,MASTER_LOG_POS=431;的时候,可能会报错,

你可能感兴趣的:(mysql,数据库,mysql,服务器)