一、安装 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 字段
刷新 从库,然后就自动同步了 主库 中的表内容