1、主从数据库原理
读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),
而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从
数据库(此处依赖组从复制).
2、读写分离的原因
数据库写入效率要低于读取效率,一般系统中数据读取频率高于写入频率,单个数据库实例在写入的时候会影响读取性能,
这是做读写分离的原因.
什么时候用读写分离
数据库不一定要读写分离,如果程序使用数据库,更新多,而查询少的情况下不会考虑使用。利用数据库主从同步,再
通过读写分离可以分担数据库压力,提高查询及写入性能。
3、实现机制
MySQL服务器之间的主从同步是基于`二进制日志机制`,主服务器使用二进制日志来记录数据库的变动情况
从服务器通过读取和执行该日志文件来保持和主服务器的数据一致
4、实现主从数据的搭建(基于docker)
5、拉取最新的mysql镜像
docker pull mysql
6、创建主动mysql容器的本地文件夹
a、文件夹用于存放配置文件以及数据库数据
mkdir mysql_master
mkdir mysql_slave
b、在对应的文件夹中,创建配置文件以及数据库文件
进入主数据文件夹 cd mysql_master
mkdir data
mkdir mysql.conf.d
进入从数据文件夹 cd mysql_slave
mkdir data
mkdir mysql.conf.d
c、创建配置文件
进入对应的mysql.conf.d文件夹中,创建配置文件
touch mysqld.cnf
7、配置文件内容
a、主机配置 vi mysqld.cnf
[mysqld]
## 同一局域网内注意要唯一
server-id=100
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin
b、从机配置 vi mysqld.cnf
[mysqld]
## 设置server_id,注意要唯一
server-id=101
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin
8、创建对应的docker
#2.启动master
sudo docker run -d --name mysql-master -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /home/wangyufei/mysql_test/my
sql_master/data:/var/lib/mysql -v /home/wangyufei/mysql_test/mysql_master/mysql.conf.d:/etc/mysql/conf.d mysql
#3.启动slave
sudo docker run -d --name mysql-slave -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /home/wangyufei/mysql_test/
mysql_slave/data:/var/lib/mysql -v /home/wangyufei/mysql_test/mysql_slave/mysql.conf.d:/etc/mysql/conf.d mysql
注意点:映射文件夹路径必须写绝对路径
映射端口不要出现冲突
9、验证数据是否启动正常
是否能够正常链接
mysql -uroot -p123456 -h xx.xx.xx.xx --port=3307
mysql -uroot -p123456 -h xx.xx.xx.xx --port=3308
10、配置master
# 登录到主机
mysql -uroot -p123456 -h xx.xx.xx.xx --port=3307
# 创建从机账号
CREATE USER slave IDENTIFIED BY 'slave';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
GRANT ALL PRIVILEGES ON *.* TO 'slave'@'%' ;
# 刷新权限
FLUSH PRIVILEGES;
# 查看二进制日志信息, 记录 文件名 和 偏移量, 后面会用到
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 | 722 | | | |
+------------------+----------+--------------+------------------+-------------------+
11、配置slave
# 登录到从机
$ mysql -uroot -p123456 -h xx.xx.xx.xx -P3308
# 从机连接到主机
$ change master to master_host='xx.xx.xx.xx', master_port=3307, master_user='slave', master_password='slave',master_log_file='mysql-bin.000003', master_log_pos=4337;
# 停止从机服务
$ stop slave;
# 开启从机服务
$ start slave;
12、注意点
a、master_log_file、以及master_log_pos一定要对应上,否则无法链接
b、如出现Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.
Error_code: MY-002061问题,是密码插件问题,如下修改即可
ALTER USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY 'slave';
FLUSH PRIVILEGES;