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;



