一个系统往往最后的瓶颈就是数据库,所以现在出了分布式数据库的概念,但是部署分布式数据库对硬件和技术的成本要求更高。所以还是很多公司采用数据库主从和读写分离的技术来平摊数据的压力。数据的读写分离有 MYCAT,SHARDINGJDBC 等。我们先来看看 MySQL 的主从配置吧。
环境:2 台 centos7 虚拟机,上面装了 mysql8.0,我这里用到的版本是 mysql-8.0.22-linux-glibc2.12-x86_64.tar.xz。(可以先装一台,再克隆一台,注意修改 mysql 的 UUIDs,UUIDs 在 / var/lib/mysql/auto.cnf。也可以使用 show variables like ‘datadir’; 命令查看)
centos7-001 ip 192.168.1.12 主master
centos7-002 ip 192.168.1.8 从slave
主从数据库的基本原理大概就是从数据库通过监听主数据库的 sql 日志,如果主有变化,从数据库会由 IO 线程把主数据的 log 脚本,通过二进制流同步到本地然后通过 sql 线程执行。所以一般也不会影响到主数据库的性能。(下面画了个简图)
1,修改主数据库的 mysql 配置文件,vim /etc/my.cnf 增加
server-id=1 给定一个值(一般认为主的<从)
log-bin=master-log # 日志名称 启用日志功能
## 配置完成之后保存
# service mysqld restart
2,主数据库创建同步的账号给从数据库使用
$ mysql -u root -p 进入主数据库
create user 'repl' identified by '123456'; ## 创建同步账号和密码
ALTER USER 'repl'@'%' IDENTIFIED BY '123456';
flush privileges;
GRANT replication slave ON *.* TO 'repl'@'%'; ## 赋予相关权限
GRANT ALL privileges ON *.* TO 'repl'@'%';
3,查看用户和远程主机连接设置
show databases;
use mysql;
show tables;
select host,user from user;
4,查看主数据库在主从关系中的状态
show master status; ## 查看主数据库在主从关系中的状态
5,修改从数据库的 mysql 配置文件,vim /etc/my.cnf 增加
server-id=2 给定一个值(一般认为主的<从)
log-bin=slave-log # 日志名称 启用日志功能
## 配置完成之后保存
# service mysqld restart
6,在从数据库的中配置出 master 的信息
CHANGE MASTER TO MASTER_HOST='192.168.1.12',MASTER_USER='repl',MASTER_PASSWORD='123456',MASTER_LOG_FILE='master-log.000003',MASTER_LOG_POS=156;
7,开启 slave, 并查看状态
start slave;
show slave status\G;
只要看到没错误,说明配置成功主从关系;
8,验证主从关系
主从服务器都重新启动,在主数据库新建数据库,新建表,添加数据,观察从数据库的状态…
主库
create database www; ## 创建数据库:
use www;
create table info(num int); ## 新建表
show tables;
insert into info values(666);## 添加数据
select * from info;
从库
use www;
show tables;
select * from info;
9,如果没有配置成功,可以从以下几个方面查找问题
防火墙关闭了吗(修改防火墙配置,放行端口)?
repl 这个用户可以登录主 MySQL 吗?
server-id=1 server-id=2 这个添加了吗?
看看 slave 的 status 信息是否跟主的 master status 一样!
本文由简悦 SimpRead 转码, 原文地址mp.weixin.qq.com