• Mysql的优化(二) Linux中搭建主从


    一. 搭建Mysql主从

    1.1 Linux中创建两个容器

    	创建一个mysq01 给端口33061
    	再创建一个mysql02给端口33062
    
    • 1
    • 2

    在这里插入图片描述

    1.2 两个mysql连接上sqlyog

    在这里插入图片描述
    连接好后如上所示
    在这里插入图片描述

    1.3准备两台主机

    在这里插入图片描述
    这里,我们准备两台机器:

    主机:192.168.248.128
    从机:192.168.248.139

    1.4 开始配置主机

    第一步:授权给从机服务器

    MySql 8.0以下

    GRANT REPLICATION SLAVE ON *.* to 'rep1'@'192.168.248.139' identified by '123';
    作用:mysql里面有三个日志,重要的有两个,这个里面用到的叫做binglog,就像Redis中的RDB备份一样,binglog里面会记录下来你所有的操作,然后从机会来到主机里面来读取他的binglog,把binglog拿回去然后自己再重放一下就知道,就可以恢复出来主机的数据了,但是得先认证身份,并不是谁来都可以去进行上面操作必须得是root用户,那么问题来了,我们把root用户给从机去进行验证本身就是错误的行为,怎么去打破这种僵局?
    这一句的意思就是,我们先通过这一行命令让从机去创建一个用户,从机等下通过这一行命令从从机登录到主机上面来去读取binglog,这一句是用户创建+授权一步完成,但是mysql8.0之后已经不允许这么写了,我们要创建和授权的步骤要分离开。

    几个配置项的含义:
    1.*.*表示操作的库,这里指的是主机能操作任何库中的任何表。
    2. rep1 表示我从机创建的用户的名字
    3. 192.168.248.139 后面紧跟着的表示用户将来得从这个地址进行登录,就跟我们之前提到的Redis中的bind的后面跟着的ip地址是一样的意思,我们下面去把他改成一个%,即让他从任意的地址登录,不去做限制
    4. 123 显然,这个是密码

    FLUSH PRIVILEGES;
    第二行的意思是刷新一下mysql不执行这一行的话我们每次都要去重启mysql

    上面两行命令经过更改后如下所示:

    GRANT REPLICATION SLAVE ON *.* to 'rep1'@'% ' identified by '123';
    FLUSH PRIVILEGES;

    MySql 8.0 :

    CREATE USER `rep1`@`192.168.248.139` IDENTIFIED WITH caching_sha2_password BY '123';

    GRANT Replication Slave ON *.* TO rep1`@`192.168.248.139`;

    第二步:
    执行前看一下能登录的用户
    在这里插入图片描述

    执行mysql的代码,创建出了新的用户rep1
    在这里插入图片描述

    第二步: 修改主库配置文件

    开启binlog,并设置server-id ,每次修改配置文件后都要重启Mysql服务才会生效。

    在这里插入图片描述

    放在你的docker包
    进入容器mysql01中的etc下的my.cnf,修改其中的配置

    vi /etc/my.cnf

    这个配置文件位置也可能是 /etc/mysql/my.cnf ,我这里是5.7的数据库,我是上面一种。

    修改的内容如下:

    [mysqld]
    log-bin=/var/lib/mysql/binlog
    server-id=128
    binlog-do-db = cmd

    如何修改?

    这里面没有vi编辑器我们该怎么办?
    由于这是容器中的配置,我们没办法用vi编辑器对他机进行修改,而如果安装一个vi编辑器的话会把容器撑大,没有必要,我们还是把那my.cnf里面的关键代码拷贝出来给修改一下然后再把my.cnf这个文件直接替换掉。

    原来的my.cnf文件配置

    # For advice on how to change settings please see
    # http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
     #修改MySQL的
    [mysqld]
    #
    # Remove leading # and set to the amount of RAM for the most important data
    # cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
    # innodb_buffer_pool_size = 128M
    #
    # Remove leading # to turn on a very important data integrity option: logging
    # changes to the binary log between backups.
    # log_bin
    #
    # Remove leading # to set options mainly useful for reporting servers.
    # The server defaults are faster for transactions and fast SELECTs.
    # Adjust sizes as needed, experiment to find the optimal values.
    # join_buffer_size = 128M
    # sort_buffer_size = 2M
    # read_rnd_buffer_size = 2M
    skip-host-cache
    skip-name-resolve
    datadir=/var/lib/mysql
    socket=/var/run/mysqld/mysqld.sock
    secure-file-priv=/var/lib/mysql-files
    user=mysql
    
    # Disabling symbolic-links is recommended to prevent assorted security risks
    symbolic-links=0
    
    #log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid
    #修改Mysql客户端的,一般乱码了就是这里出现了问题
    [client]
    socket=/var/run/mysqld/mysqld.sock
    
    !includedir /etc/mysql/conf.d/
    !includedir /etc/mysql/mysql.conf.d/
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    进行我们需要的进行修改之后的配置

    # For advice on how to change settings please see
    # http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
     #修改MySQL的
    [mysqld]
    #
    # Remove leading # and set to the amount of RAM for the most important data
    # cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
    # innodb_buffer_pool_size = 128M
    #
    # Remove leading # to turn on a very important data integrity option: logging
    # changes to the binary log between backups.
    # log_bin
    #
    # Remove leading # to set options mainly useful for reporting servers.
    # The server defaults are faster for transactions and fast SELECTs.
    # Adjust sizes as needed, experiment to find the optimal values.
    # join_buffer_size = 128M
    # sort_buffer_size = 2M
    # read_rnd_buffer_size = 2M
    
    
    log-bin=/var/lib/mysql/binlog
    server-id=33061
    binlog-do-db = db01
    
    
    
    skip-host-cache
    skip-name-resolve
    datadir=/var/lib/mysql
    socket=/var/run/mysqld/mysqld.sock
    secure-file-priv=/var/lib/mysql-files
    user=mysql
    
    # Disabling symbolic-links is recommended to prevent assorted security risks
    symbolic-links=0
    
    #log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid
    #修改Mysql客户端的,一般乱码了就是这里出现了问题
    [client]
    socket=/var/run/mysqld/mysqld.sock
    
    !includedir /etc/mysql/conf.d/
    !includedir /etc/mysql/mysql.conf.d/
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45

    然后用上面配置好的文件把mysql01里面的文件给覆盖
    在这里插入图片描述
    docker restart mysql01去重启mysql01
    重启完成后数据库中输入SHOW MASTER STATUS;

    在这里插入图片描述
    这样我们就把主机给配置好了。
    上图中的几项重要的配置

    binlog的名字是:binlog.000001
    Position是154
    Binlog_Do_DB是我们要去备份的东西

    1.5 开始配置从机

    从机配置也是配置my.cnf
    与上面不同的是把从机端口改一下,然后端口上下两行命令删除即可
    在这里插入图片描述

    配置完成后复制到mysql02中然后重启,与主机配置类似
    在这里插入图片描述

    Mysql02对应的从机中写入

    #主机地址改成我们自己的地址,比如黄黄这里是1.12.235.192
    #主机端口master_port改为33061
    #master_log_file和master_log_pos根据主机配好后查询出来的更改
    CHANGE MASTER TO MASTER_HOST=‘1.12.235.192’,MASTER_PORT=33061,
    MASTER_USER=‘rep1’,MASTER_PASSWORD=‘123’,MASTER_LOG_FILE=‘binlog.000001’,
    MASTER_LOG_POS=154;
    ##启动从机
    START SLAVE
    #查看从机的状态
    SHOW SLAVE STATUS;

    在这里插入图片描述

    从机主要查看的参数:

    在这里插入图片描述

    主要看这两个地方没问题就没啥问题了
    如果出现了,Connecting ,no 就是你的linux的配置配错或者你的mysql的指令出错了

    到此我们的主从就配置好了,下面来看看主从有什么作用和为什么要配置主从吧

    二.主从配置实现读写分离

    2.1 主机中创建表

    在主机33061中先创建数据库db01
    在这里插入图片描述
    再创建表user
    在这里插入图片描述

    加入数据
    在这里插入图片描述

    2.2 从机中读取数据

    在从机33062中刷新库
    在这里插入图片描述

    2.3 为什么不推荐在从机中写入数据

    从机中也出现了数据,且,数据是在主机中添加的,可以在从机中读取,实现了读写分离。

    注意:从机中也是可以插入数据的,但是并不推荐,因为插入到从机的数据就会造成紊乱

    1.从机中插入数据是不会同步到主机上面去的。
    2.如果不想去从机中插入数据,可以通过数据库锁来实现。

  • 相关阅读:
    ESP8266 WiFi物联网智能插座—项目简介
    基于51单片机的心率脉搏检测报警系统Proteus仿真
    JavaScript 63 JavaScript 对象 63.9 JavaScript Map 对象
    JDK源码分析实战系列-PriorityQueue
    百数新功能——前端事件,触发更多可能性
    009 面试题 SQL语句各部分的执行顺序
    大数据开发之Hive案例篇10-大表笛卡尔积优化
    C++语言基础-函数重载
    海域可视化监管:浅析海域动态远程视频智能监管平台的构建方案
    裙式给料机的全球市场在2030年前将达到64亿美元!
  • 原文地址:https://blog.csdn.net/weixin_43189971/article/details/126381203