基于docker的mysql主从数据库配置

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;

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值