MySQL的主从模式搭建

  • Post author:
  • Post category:mysql


一、安装 MySQL

1、在虚拟机中先装两台 centos7

2、然后分别在两台 cnetos7 中安装 mysql,并配置好 mysql 的相关权限等

3、使用MySQL数据库连接工具 SQLyog 或者 Navicat 测试数据库的连接,将两个 MySQL 数据库分别作为 主库、从库

1)例如:我虚拟机中 centos7 中的两个 MySQL 数据库连接地址分别为:192.168.7.83、192.168.49.130

主库(Master):192.168.7.83         ( 对应虚拟机: centos7 )

从库(Slave):192.168.49.130     ( 对应虚拟机:centos7 – 04 )

二、Master[主库] 配置

1)修改 Master 配置文件

vim  /etc/my.cnf

修改 my.cnf 为下面的内容 (加上下面标红的两句内容)

# 修改为

# MySQL 服务唯一标识
# server_id 任意配置,只要是数字即可
#


但是server_id Master 唯一标识数字

必须小于

Slave 唯一标识数字.



server_id=1

# 开启日志功能以及日志文件命名
# 变量的值就是日志文件名称.是日志文件名称的主体.
#


MySQL数据库自动增加文件名后缀和文件类型. 如 master_log.xxxxxxxxxxxxxxxx

# 这里设置的 log_bin 就是主库中的 Binary log 文件,用来了被从库读取


log_bin=master_log

加入后的内容

my.cnf 文件默认的内容:

# For advice on how to change settings please see

# http://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html

[mysqld]

#

# Remove leading # and set to the amount of RAM for the most important data

# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.

# innodb_buffer_pool_size = 128M

#

# Remove the leading “# ” to disable binary logging

# Binary logging captures changes between backups and is enabled by

# default. It’s default setting is log_bin=binlog

# disable_log_bin

#

# Remove leading # to set options mainly useful for reporting servers.

# The server defaults are faster for transactions and fast SELECTs.

# Adjust sizes as needed, experiment to find the optimal values.

# join_buffer_size = 128M

# sort_buffer_size = 2M

# read_rnd_buffer_size = 2M

#

# Remove leading # to revert to previous value for default_authentication_plugin,

# this will increase compatibility with older clients. For background, see:

# https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin

# default-authentication-plugin=mysql_native_password

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

2)重启 MySQL

systemctl  restart  mysqld

3)配置 Master

# 访问MySQL(命令行登陆到 MySQL)

mysql  -u  root  -p          # 然后输入密码 123456

创建用户(创建用来访问 该主库的用户)

  • 在 MySQL 数据库中,为不存在的用户授权,就是同步创建用户并授权。此用户是 从库Slave 访问主库使用的用户,ip地址不能写为%,

  • 因为主从备份中,当前创建的用户,是给 从库Slave 访问 主库Master 使用的,用户必须有指定的访问地址,不能是通用地址,

set global validate_password_policy=0;

set global validate_password_length=4;

#

创建 slave 用户,并给 slave 用户授权 ;ON *.* 表示所有库下面的所有的表 ,


IDENTIFIED BY ‘slave’  表示密码是 slave

#



这里的ip地址换成你的从库的ip地址


GRANT ALL PRIVILEGES ON *.* TO ‘slave’@’192.168.49.130’ IDENTIFIED BY ‘slave’ WITH GRANT OPTION;
FLUSH PRIVILEGES;

创建用户流程:

查看用户

use mysql;     # 使用 mysql 数据库

select host,user from user;    # 查询 mysql 数据库下的 user 表中的 host、User 字段

使用 mysql 库中的 user 表,查看用户创建的情况

查看 mysql 库中的所有表

查询 user 表的 user 和 host 字段

查看 Master 信息

show  master  status;

查看 master 相应的信息  (这里就可以看到 master_log.000001 就是之前我们在 my.conf 中配置的 二进制文件 )

查看 master_log.000001 文件所在的位置:/var/lib/mysql  并进入该位置查看 master_log 文件

master_log.000001 文件我们无法查看,但我们可以使用 cat 命令查看 master_log.index,其实 master_log.index 的内容表示的是 master_log.000001 所在的位置

到这里 主库Master 的配置就算是配好了

三、Slave[从库] 配置

1)修改 Slave 配置文件

vim  /etc/my.cnf

修改为下列的内容:

# MySQL 服务唯一标识

# server_id 任意配置,只要是数字即可
#


server_id Master 唯一标识数字

必须小于

Slave 唯一标识数字.



server_id=2

从库 的 server_id 一定要比 主库 的大

2)重启 MySQL

systemctl r estart  mysqld

3)配置 Slave

先访问一下 MySQL:

mysql  -u  root  -p         # 然后输入密码 123456

停止 Slave 功能:(在 mysql 命令行中执行)

stop  slave;             # 先停止后,才能执行配置主库的命令

在 从库 中 配置 主库 信息:

  • 需要修改的数据是依据Master信息修改的.

  • ip是Master 所在物理机IP.

  • 用户名和密码是Master提供的Slave访问用户名和密码.

  • 日志文件是在Master中查看的主库信息提供的.

  • 在Master中使用命令show master status查看日志文件名称。



# 需要主库的ip地址、mysql的 用户名 和 密码



change master to master_host=’

192.168.7.83

‘,master_user=’

root

‘,master_password=’

123456

‘,master_log_file=’

master_log.000001

‘;

这里配置的 master_log_file 文件一定是要在 主库 中使用 show master status 命令查找出来的 File (一定是要对应的,不对应时,需要重新执行一下change命令)

在主库中 查找到的 日志文件,因为 从库 读取的就是这个 主库 中的文件

启动Slave功能:(在 mysql 命令行中执行)

start  slave;

查看 Slave 配置:

show  slave  status  \G;        # \G 表示格式化输出信息

如果这里的 Error 有问题,说明没有配置成功

四、测试主从

1)使用 SQLyog 或者 Navicat,分别连接 主库 192.168.7.83  root/123456 名称为 mycat-master、从库 192.168.49.130 root/123456 名称为 mycat-slave


主库 连接


从库 连接

2)建库,测试是否同步成功

然后在 主库 中新建一个 test 数据库,选择 utf8mb4,utf8mb4_general_ci

刷新 从库,然后就自动同步了 主库 的内容

3)建表,测试是否同步成功

在 主库 的 test 数据库中,新建一张 user 表,表有 id 和 name 字段

刷新 从库,然后就自动同步了 主库 中的表内容



版权声明:本文为IT_Boy_原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。