广告
返回顶部
首页 > 资讯 > 数据库 >MySQL中如何实现读写分离
  • 997
分享到

MySQL中如何实现读写分离

2024-04-02 19:04:59 997人浏览 安东尼
摘要

Mysql中如何实现读写分离,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一,创建Master数据库的配置文件vi master

Mysql中如何实现读写分离,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

一,创建Master数据库的配置文件

vi master.cnf [mysqld] # master server id server-id = 1  # bin log log_bin = mysql-master-bin
  • server-id,在MySQL集群数据库中,这个参数必须唯一

  • log_bin,MySQL采用二进制日志文件复制的文件名

二,将该配置文件拷贝到MySQL Docker容器中

Docker run --name mysql -e MYSQL_ROOT_PASSWord=root -d mysql docker cp master.cnf fdb98bbd52b6:/etc/mysql/conf.d

三,提交修改后的Docker容器

docker commit -m "add master configure file" fdb98bbd52b6 mysql:master [root@dev01 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql master 345465966cb5 3 hours aGo 445MB
  • commit -m是修改容器后提交的信息,类似git提交;

  • fdb98bbd52b6是刚才修改的容器;

  • mysql:master是我们为修改后的容器打上tag标签master

接下来我们修改MySQL Slave(从数据库)的容器配置文件

一,创建Slave数据库的配置文件

vi slave.cnf [mysqld] # slave server id server-id = 2  # bin log log_bin = mysql-slave-bin relay_log = mysql-relay-bin log_slave_updates = 1 read_only = 1
  • server-id为从数据库的ID,该参数在MySQL集群中必须保持唯一性;

  • log_bin如果slave为其它slave的master,必须设置bin_log,在这里我们暂时开启;

  • relay_log配置中继日志

  • log_slave_updates表示slave将复制事件写进自己的二进制日志(后面会看到它的用处);

  • read_only尽量使用read_only,它防止改变数据(除了特殊的线程);

二,将配置文件拷贝到容器中

docker run --name mysql -e MYSQL_ROOT_PASSWORD=root -d mysql docker cp slave.cnf 8ee82abb2e91:/etc/mysql/conf.d

三,提交修改后的Docker容器

docker commit -m "add slave configure file" 8ee82abb2e91 mysql:slave [root@dev01 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql slave 3a53cd39ee45 4 hours ago 445MB

到此,所需要的两个MySQL容器已经修改完毕,并且保存在我们本地的容器仓库中,接下来我们开始启动刚才修改的两个容器进行后续的配置

一,启动Master数据库

docker run --name master -e MYSQL_ROOT_PASSWORD=root -d mysql:master
  • --name master是我们为启动的容器名;

  • mysql:master是我们刚才修改后并且提交到本地的Docker镜像

  • 默认数据库root的密码设置为root

二,启动Slave数据库

docker run --link master:master --name slave -e MYSQL_ROOT_PASSWORD=root -d mysql:slave
  • 为了master容器与slave容器的网络互通,我们添加了--line选项来连接到我们刚才启动的名为master容器;

  • --name slave是我们为启动的容器名;

  • mysql:slave是我们刚才修改后并且提交到本地的Docker镜像;

  • 默认数据库root的密码设置为root

三,进入master容器中通过mysql命令进入数据库

docker exec -it master /bin/bash mysql -u root -proot

四,在master数据库中创建用于复制数据的账号,并且给该账号相应的权限

create user 'repl'@'%' identified by 'repl-pwd'; grant replication slave on *.* to 'repl'@'%'; flush privileges;

五,查看master数据库的状态

mysql> show master status; +-------------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +-------------------------+----------+--------------+------------------+-------------------+ | mysql-master-bin.000003 | 2743 | | | | +-------------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec)

六,进入slave容器中通过mysql命令进入数据库

docker exec -it slave /bin/bash mysql -u root -proot

七,配置slave,将master数据库指向刚才配置好的master数据库节点,并且启动slave

change master to master_host='master', master_user='repl', master_password='repl-pwd', master_log_file='mysql-master-bin.000003', master_log_pos=0; start slave;

八,查看slave数据库状态

mysql> show slave status\G *************************** 1. row ***************************  Slave_IO_State:  Master_Host: master  Master_User: repl  Master_Port: 3306  Connect_Retry: 60  Master_Log_File: mysql-master-bin.000003  Read_Master_Log_Pos: 4  Relay_Log_File: mysql-relay-bin.000001  Relay_Log_Pos: 4  Relay_Master_Log_File: mysql-master-bin.000003  Slave_IO_Running: No  Slave_SQL_Running: No  Replicate_Do_DB:  Replicate_Ignore_DB:  Replicate_Do_Table:  Replicate_Ignore_Table:  Replicate_Wild_Do_Table:  Replicate_Wild_Ignore_Table:  Last_Errno: 0  Last_Error:  Skip_Counter: 0  Exec_Master_Log_Pos: 4  Relay_Log_Space: 155  Until_Condition: None  Until_Log_File:  Until_Log_Pos: 0  Master_SSL_Allowed: No  Master_SSL_CA_File:  Master_SSL_CA_Path:  Master_SSL_Cert:  Master_SSL_Cipher:  Master_SSL_Key:  Seconds_Behind_Master: NULL Master_SSL_Verify_Server_Cert: No  Last_IO_Errno: 2061  Last_IO_Error: error connecting to master 'repl@master:3306' - retry-time: 60 retries: 1 message: Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.  Last_SQL_Errno: 0  Last_SQL_Error:  Replicate_Ignore_Server_Ids:  Master_Server_Id: 0  Master_UUID:  Master_Info_File: mysql.slave_master_info  SQL_Delay: 0  SQL_Remaining_Delay: NULL  Slave_SQL_Running_State:  Master_Retry_Count: 86400  Master_Bind:  Last_IO_Error_Timestamp: 190912 06:06:14  Last_SQL_Error_Timestamp:  Master_SSL_Crl:  Master_SSL_Crlpath:  Retrieved_Gtid_Set:  Executed_Gtid_Set:  Auto_Position: 0  Replicate_Rewrite_DB:  Channel_Name:  Master_TLS_Version:  Master_public_key_path:  Get_master_public_key: 0  Network_Namespace: 1 row in set (0.00 sec)

由于最新版的MySQL为了提升安全性更改了密码校验插件,在这里我们还是采用之前的密码校验插件,我们在master数据库上用如下的命令来修改刚才在master数据库创建的用户

alter user 'repl'@'%' identified by 'repl-pwd' password expire never; alter user 'repl'@'%' identified with mysql_native_password by 'repl-pwd'; flush privileges;

九,再次查看slave状态

mysql> show slave status\G *************************** 1. row ***************************  Slave_IO_State: Waiting for master to send event  Master_Host: master  Master_User: repl  Master_Port: 3306  Connect_Retry: 60  Master_Log_File: mysql-master-bin.000003  Read_Master_Log_Pos: 2743  Relay_Log_File: mysql-relay-bin.000002  Relay_Log_Pos: 2971  Relay_Master_Log_File: mysql-master-bin.000003  Slave_IO_Running: Yes  Slave_SQL_Running: Yes  Replicate_Do_DB:  Replicate_Ignore_DB:  Replicate_Do_Table:  Replicate_Ignore_Table:  Replicate_Wild_Do_Table:  Replicate_Wild_Ignore_Table:  Last_Errno: 0  Last_Error:  Skip_Counter: 0  Exec_Master_Log_Pos: 2743  Relay_Log_Space: 3179  Until_Condition: None  Until_Log_File:  Until_Log_Pos: 0  Master_SSL_Allowed: No  Master_SSL_CA_File:  Master_SSL_CA_Path:  Master_SSL_Cert:  Master_SSL_Cipher:  Master_SSL_Key:  Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: No  Last_IO_Errno: 0  Last_IO_Error:  Last_SQL_Errno: 0  Last_SQL_Error:  Replicate_Ignore_Server_Ids:  Master_Server_Id: 1  Master_UUID: f6e8062e-d521-11e9-9009-0242ac110008  Master_Info_File: mysql.slave_master_info  SQL_Delay: 0  SQL_Remaining_Delay: NULL  Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates  Master_Retry_Count: 86400  Master_Bind:  Last_IO_Error_Timestamp:  Last_SQL_Error_Timestamp:  Master_SSL_Crl:  Master_SSL_Crlpath:  Retrieved_Gtid_Set:  Executed_Gtid_Set:  Auto_Position: 0  Replicate_Rewrite_DB:  Channel_Name:  Master_TLS_Version:  Master_public_key_path:  Get_master_public_key: 0  Network_Namespace: 1 row in set (0.00 sec)

我们主要查看Slave_IO_Running和Slave_SQL_Running,表示我们的slave数据库节点已经成功的连接到了我们的master数据库节点。

十,验证,我们在master数据库节点上创建一个空的数据库

mysql> create database data; Query OK, 1 row affected (0.10 sec)  mysql> show databases; +--------------------+ | Database | +--------------------+ | data | | infORMation_schema | | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.01 sec)

十一,验证slave,查看刚才在master数据库节点上创建的数据库是否同步到slave数据节点

mysql> show databases; +--------------------+ | Database | +--------------------+ | data | | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.01 sec)

可以看到,我们刚才在master数据库节点上创建的数据库已经同步到我们的slave数据库节点,master和slave的数据库数据已经保持一致。

关于MySQL中如何实现读写分离问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网数据库频道了解更多相关知识。

您可能感兴趣的文档:

--结束END--

本文标题: MySQL中如何实现读写分离

本文链接: https://www.lsjlt.com/news/57995.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL中如何实现读写分离
    MySQL中如何实现读写分离,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一,创建Master数据库的配置文件vi master...
    99+
    2022-10-18
  • mysql中Oneproxy如何实现读写分离
    这篇文章将为大家详细讲解有关mysql中Oneproxy如何实现读写分离,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。基本架构: 写请求全部定向到主库,数据通过日志异步复...
    99+
    2022-10-19
  • php+mysql如何实现读写分离
    这篇“php+mysql如何实现读写分离”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php+mysql如何实现读写分离”文...
    99+
    2023-07-05
  • mysql+mycat实现读写分离
    centos7 master slave mycat1.6 client 192.168.41.10 192.168.41.11 192.168.41.12 192.168.41.13 ...
    99+
    2022-10-18
  • SpringBoot项目中如何实现MySQL读写分离
    这篇“SpringBoot项目中如何实现MySQL读写分离”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“SpringBoot...
    99+
    2023-07-06
  • MySQL Router实现MySQL的读写分离
    MySQL Router实现MySQL的读写分离 https://www.cnblogs.com/f-ck-need-u/p/9276639.html https://www.cnblogs.com...
    99+
    2022-10-18
  • MyCAT实现MySQL的读写分离
    在MySQL中间件出现之前,对于MySQL主从集群,如果要实现其读写分离,一般是在程序端实现,这样就带来一个问题,即数据库和程序的耦合度太高,如果我数据库的地址发生改变了,那么我程序端也要进行相应的修改,如...
    99+
    2022-10-18
  • 怎么实现mysql读写分离
    这篇文章主要介绍“怎么实现mysql读写分离”,在日常操作中,相信很多人在怎么实现mysql读写分离问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么实现mysql读写分离”...
    99+
    2022-10-19
  • MySQL中间件proxysql实现MySQL读写分离
    1. Mysql实现读写分离的方式 mysql 实现读写分离的方式有以下几种: 程序修改mysql操作,直接和数据库通信,简单快捷的读写分离和随机的方式实现的负载均衡,权限独立分配,需要开发人员协助。 amoeba,直接实现读写分离和负载...
    99+
    2021-12-16
    MySQL中间件proxysql实现MySQL读写分离 数据库入门 数据库基础教程 数据库 mysql
  • MySQL 中间件Atlas 实现读写分离
    〇 Atlas架构介绍 Atlas是Qihoo360开发的一个中间件,位于Client和MySQL Server中间层,可以作为读写分离,分库分表中间件。 对于MySQL Server而言,Atlas像是...
    99+
    2022-10-18
  • mysql基于amoeba如何实现读写分离
    下文给大家带来关于mysql基于amoeba如何实现读写分离,感兴趣的话就一起来看看这篇文章吧,相信看完mysql基于amoeba如何实现读写分离对大家多少有点帮助吧。环境:    &n...
    99+
    2022-10-18
  • Mycat如何实现Mysql集群读写分离
    这篇文章给大家分享的是有关Mycat如何实现Mysql集群读写分离的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。MySQL 读写分离的概述MySQL 作为目前世界上使用最广泛的免...
    99+
    2022-10-19
  • SpringBoot详解MySQL如何实现读写分离
    目录前言一、主从数据源的配置二、数据源路由的配置三、数据源上下文环境四、切换注解和Aop配置五、用法以及测试六、总结前言 首先思考一个问题:在高并发的场景中,关于数据库都有哪些优化的...
    99+
    2022-11-13
  • mysql 基于mysql-proxy实现读写分离
    mysql 读写分离 读写分离首先不推荐使用,很多业务场景也没有必要,不仅增加技术复杂度,而且可能会导致读到落后的数据,建议优化数据库,推荐使用keepalive+mysql双主复制的方案 然后mysql-proxy是官方推出的中间件,不仅...
    99+
    2015-08-29
    mysql 基于mysql-proxy实现读写分离 数据库入门 数据库基础教程 数据库 mysql
  • 安装mysql-proxy实现mysql读写分离
    一. 环境描述操作系统版本:centos 7.2主服务器:192.168.0.72  node2从服务器:192.168.0.73  node3调度服务器MySQL-Proxy...
    99+
    2022-10-18
  • mysql-proxy实现读写分离脚本
    将以下脚本保存为/etc/init.d/mysql-proxy ,赋予权限chmod 755 /etc/init.d/mysql-proxy#!/bin/bash # # mysql-proxy&...
    99+
    2022-10-18
  • 使用mysql-proxy实现读写分离
    mysql-proxy实现MySQL读写分离 使用二进制格式的mysql-proxy的安装配置 mysql-proxy本身并不能进行读写分离,要实现读写分离要依赖于lua,所以要先查看是否安装了lua,...
    99+
    2022-10-18
  • MySQL使用ProxySQL实现读写分离
    1 ProxySQL简介: ProxySQL是一个高性能的MySQL中间件,拥有强大的规则引擎。官方文档:https://github.com/sysown/proxysql/wiki/下载地址:https...
    99+
    2022-10-18
  • 使用Maxscale实现mysql读写分离
    MaxScale 是 MariaDB 的产品之一,可以很方便的实现读写分离方案;并且提供了读写分离的负载均衡和高可用性保障。一、安装配置前提:先配置好mysql的主从,Maxscale会自动的根据...
    99+
    2022-10-18
  • SpringBoot项目中如何实现MySQL读写分离详解
    目录1、MySQL主从复制1.1、介绍二进制日志:MySQL复制过程分成三步:1.2、主从库搭建1.2.1、主库配置1.2.2、从库配置1.3、坑位介绍1.3.1、UUID报错1.3...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作