zoukankan      html  css  js  c++  java
  • 主从同步、读写分离、mysql性能调优(软优化)

     配置mysql主从同步
    1 主从同步的作用:让slave身份的数据库服务器自动同步

    master身份的数据库服务器上的数据。

    一、主数据库服务器的配置192.168.4.12
    1 用户授权
    mysql> grant replication slave on *.* to

    slaveuser@"192.168.4.11" identified by "123456";
    2 启用binlog日志
    vim /etc/my.cnf
    [mysqld]
    server_id=12
    log_bin=master12
    binlog_format="mixed"
    :wq
    #systemctl stop mysqld
    #systemctl start mysqld
    #ls /var/lib/mysql/master12.*
    #mysql -uroot -p123456
    mysql> show master status;

    二 、从数据库服务器的配置192.168.4.11
    1 验证主库的授权用户
    #ping 192.168.4.12
    #mysql -h192.168.4.12 -uslaveuser -p123456
    mysql> show grants;

    2 修改配置文件指定server_id
    vim /etc/my.cnf
    [mysqld]
    server_id=11
    :wq

    #systemctl stop mysqld
    #systemctl start mysqld

    3 设置自己是那台主机的从库
    #mysql -uroot -p123456
    mysql> show slave status;
    mysql> change master to

    master_host="192.168.4.12",
    master_user="slaveuser",
    master_password="123456",
    master_log_file="master12.000001",
    master_log_pos=154;
    mysql>show slave statusG;
    mysql> start slave;
    mysql>show slave statusG;
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes

    三测试主从同步配置
    客户端访问主库时 产生的数据在从库上都可以看的到。


    从库暂时不同步主库的数据
    mysql> stop slave;


    把从库恢复为独立的数据库服务器
    #rm -rf master.info localhost-relay-bin.* relay-

    log.info
    #systemctl stop mysqld ; systemctl start mysqld

    四、主从同步工作过程
    cd /var/lib/mysql/
    master.info 连接主库信息
    localhost-relay-bin.000001 中继日志文件
    localhost-relay-bin.index 日志索引文件
    relay-log.info 中继日志信息

    IO线程 :负责把主库binlog里的sql命令保存到本机的中继日

    志文件里。

    报错原因: 连接不上主库服务器(ping selinux firewalld

    grant binlog日志指定错误)

    Last_IO_Error: 报错信息

    解决错误
    mysql> stop slave;
    mysql> change master to 选项=值,选项=值;
    mysql> start slave;

    SQL线程:执行本机中继日志文件里的sql命令把数据写进库里


    报错原因:本机没有执行日志文件里sql命令时,使用的库或表

    Last_SQL_Error: 报错信息


    解决办法:让从库有主库比自己多的数据,然后 stop slave ;start slave;
    ++++++++++++++++++++++++++++++++++
    五、主从同步结构
    一主一从 *
    一主多从 *
    主从从
    主主结构(互相主从)
    ++++++++++++++++++++++++++++++++++++
    主从同步配置常用参数
    vim /etc/my.cnf
    /etc/my.cnf
    [mysqld]
    ....
    :wq
    #systemctl restart mysqld
    #mysql>show master status;

    主数据服务器使用的参数
    binlog_do_db=db1,db2 只允许同步本机库1和库2
    binlog_ignore_db=db1,db2 只不允许同步本机库1和库2

    从数据服务器使用的参数
    log_slave_updates 允许级联复制(主从从)
    replicate_do_db=db1,db2 只同步库1和库2
    replicate_ignore_db=db1,db2 只不同步库1和库2
    relay_log=名 指定中继日志文件名

    五、mysql读写分离 (第三方软件 + 主从同步)
    1 什么读写分离:把不同操作给不同的数据库服务器处理
    2 为什么要做读写分离:减轻服务器的并发访问压力同时提高硬

    件利用率。

    实现读写分离
    第三方软件 :有很多 统称mysql中间件 不同的中间件软件有不

    同的功能,大多数都是开源 (mysql-proxy mysql-mmm

    mycat maxscale*)

    主从同步结构(一主一从 )
    要求:把数据库服务器11 配置为数据库服务器12的从服务器。

    1、配置12
    1.1 用户授权
    1.2 启用binlog日志

    2、配置11
    2.1 测试授权用户
    2.2 设置server_id
    2.3 管理员帐号登录,设置自己为12的从数据库服务器
    2.4 查看IO线程和SQL线程的状态

    3、在客户端测试主从同步配置
    3.1 在主数据库服务器上添加对数据有访问权限的用户
    mysql> grant all on bbsdb.* to webadmin@"%"

    identified by "123456";
    mysql> create database bbsdb;

    使用主数据库服务器上授权用户连接主数据库服务器,建库,建

    表,连接从数据库时,也能够看到新创建的库和表。
    #mysql -h192.168.4.12 -uwebadmin -p123456

    3 配置实现读写分离功能的服务器(13)
    3.1 能够和2台数据库服务器通信
    #ping 192.168.4.11/12
    3.2 安装软件maxscale-2.1.2-1.rhel.7.x86_64.rpm
    #rpm -ivh maxscale-2.1.2-1.rhel.7.x86_64.rpm(根据提示

    安装依赖包)
    #rpm -ql maxscale
    #rpm -qc maxscale

    3.3 修改配置文件
    # grep -v '#' /etc/maxscale.cnf.template >

    /etc/maxscale.cnf

    [root@mysql-13 ~]# cat /etc/maxscale.cnf
    [maxscale]
    threads=1

    [server1]
    type=server
    address=192.168.4.11
    port=3306
    protocol=MySQLBackend

    [server2]
    type=server
    address=192.168.4.12
    port=3306
    protocol=MySQLBackend

    [MySQL Monitor]
    type=monitor
    module=mysqlmon
    servers=server1,server2
    user=scalemon
    passwd=111111
    monitor_interval=10000

    [Read-Write Service]
    type=service
    router=readwritesplit
    servers=server1,server2
    user=maxscale
    passwd=111111
    max_slave_connections=100%

    [MaxAdmin Service]
    type=service
    router=cli

    [Read-Write Listener]
    type=listener
    service=Read-Write Service
    protocol=MySQLClient
    port=4006

    [MaxAdmin Listener]
    type=listener
    service=MaxAdmin Service
    protocol=maxscaled
    socket=default
    port=4008
    [root@mysql-13 ~]#

    [maxscale] 定义服务运行时启动的线程数量
    [server数字] 定义数据库服务器ip地址
    [MySQL Monitor] 定义监控成员列表
    [Read-Write Service]定义读写分离主机列表
    [MaxAdmin Service] 定义管理服务
    [Read-Write Listener]定义读写分离服务使用的端口
    [MaxAdmin Listener]定义管理服务使用的端口


    根据配置文件里设置,在数据库服务器上添加对应的授权用户
    mysql>grant replication slave, replication client on *.*

    to scalemon@'%' identified by “111111”;

    mysql> grant select on mysql.* to maxscale@'%'

    identified by "111111";

    3.4 启动服务
    # maxscale -h
    # maxscale -f /etc/maxscale.cnf
    [root@mysql-13 ~]# netstat -utnalp | grep maxscale
    tcp 0 0 192.168.4.13:39870 192.168.4.12:3306

    ESTABLISHED 12412/maxscale
    tcp 0 0 192.168.4.13:32980 192.168.4.11:3306

    ESTABLISHED 12412/maxscale
    tcp6 0 0 :::4008 :::* LISTEN

    12412/maxscale
    tcp6 0 0 :::4006 :::* LISTEN

    12412/maxscale
    [root@mysql-13 ~]#


    在本机连接管理端口查看监控主机的状态
    [root@mysql-13 ~]# maxadmin -P 4008 -pmariadb
    MaxScale> list servers
    Servers.
    -------------------+-----------------+-------+-------------

    +--------------------
    Server | Address | Port | Connections |

    Status
    -------------------+-----------------+-------+-------------

    +--------------------
    server1 | 192.168.4.11 | 3306 | 0 | Slave,

    Running
    server2 | 192.168.4.12 | 3306 | 0 | Master,

    Running
    -------------------+-----------------+-------+-------------

    +--------------------
    MaxScale> list ser
    Unknown or missing option for the list command. Valid

    sub-commands are:
    clients List all clients
    dcbs List all DCBs
    filters List all filters
    listeners List all listeners
    modules List all currently loaded modules
    monitors List all monitors
    services List all the services
    servers List all servers
    sessions List all sessions
    threads List polling threads
    commands List registered commands
    MaxScale> quit


    4 在客户端测试读写分离
    mysql -h192.168.4.13 -P 4006 -uwebadmin -

    p123456
    mysql> select * from bbsdb.a;
    insert insert into bbsdb.a values(1001);

    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    mysql性能调优(软优化)
    维护的数据库服务器响应客户端请求慢,可能是什么原因导致的?
    1.1网络带宽窄(使用网络测速软件)

    1.2服务器硬件配置过低(CPU 内存 存储)
    使用命令或监控软件监视 使用情况 (top free -m )


    1.3提供数据库服务软件版本低
    如何知道是否是软件版本低,查看服务运行时的参数信息
    /etc/my.cnf
    [mysqld]
    变量名=值
    :wq

    #mysql -uroot -p123456
    查看参数值
    mysql> show variables like "%timeout%";
    mysql> show variables like "connect_timeout";

    修改参数值
    mysql> set 变量名=值;
    mysql> set global 变量名=值;

    mysql> SET GLOBAL connect_timeout=5;

    常用变量的设置:
    1 并发连接数 max_connections
    mysql> show processlist

    mysql> show global status like "max_used_connections";

    max_used_connections/max_connections=0.85

    2建立连接3次握手超时时间
    connect_timeout

    3 连接建立后,关闭某个不活动连接的超时时间
    wait_timeout 28800

    4 线程数量:允许保存在缓存中被重用的线程数量
    thread_cache_size

    5 为所有线程缓存的打开的表的数量
    table_open_cache


    6 与查询缓存相关的参数

    select * from t1; read_buffer_size

    select * from t1 where name like "a%"; key_buffer-size
    seletct * from t1 group by sex; read_rnd_buffer_siz
    seletct * from t1 order by 成绩; sort_buffer_size

    查询优化
    阐述mysql数据服务器处理查询请求的过程?


    mysql> show variables like "query_cache%";
    query_cache_type=0/1/2

    0 不允许存
    1 无条件存储
    2 要设置把查询结果记录到查询缓存里才存储

    select in_sql_cache * from t1;

    query_cache_wlock_invalidate off
    myisam存储引擎的表


    pc1 select name from t1 where name="jim"
    name="jim"

    pc2 select name from t1 where name="jim";
    pc3 update t1 set name="tom" where name="jim";

    显示查询缓存统计信息
    mysql> show global status like "qcache%";
    Qcache_hits 30
    Qcache_inserts 100
    Qcache_lowmem_prunes 10
    Qcache_not_cached

    1.4 程序员访问数据的sql命令复杂导致处理速度慢
    mysql数据库服务启用慢查询日志 ,记录客户端连接后服务后,

    超过指定时间显示查询结果sql命令。

    mysql数据库服务的日志类型?
    错误日志 binlog日志 查询日志 慢查询日志
    默认启用的

    vim /etc/my.cnf
    [mysqld]
    选项
    :wq
    #systemctl stop mysqld;
    #systemctl start mysqld;

    错误日志:记录服务在启动和运行过程中产生的错误信息
    log-error=/var/log/mysqld.log

    查询日志 :记录客户端连接后服务后,执行的所有sql命令。
    [mysqld]
    general-log


    cat /var/lib/mysql/主机名.log

    慢查询日志:记录客户端连接后服务后,超过指定时间显示查询结果sql命令。

    [mysqld]
    slow-query-log

    mysql> select sleep(11);
    # cat /var/lib/mysql/主机名-slow.log
    #mysqldumpslow /var/lib/mysql/主机名-slow.log > /tmp/sql.txt

    1.5 网络结构不合理

  • 相关阅读:
    spring filter and interceptor
    spring 与 swagger 2 的整合
    spring 异步操作
    图片延迟加载 jquery,lazyload.js 调用的demo
    一、Spring的第一个课时
    线程的基本了解
    HTTPS/HTTP监听常见问题
    Leetcode 118 杨辉三角
    HashSet的源码解释
    HashMap源码理解
  • 原文地址:https://www.cnblogs.com/fuzhongfaya/p/8952872.html
Copyright © 2011-2022 走看看