zoukankan      html  css  js  c++  java
  • 读写分离和多实例

                                                mysql-day07       读写分离和多实例

      

    问题配置条件

    代理服務器  53  55

    主庫52    从库54

    案例拓扑

     • 添加一个 MySQL 代理

    为客户端提供统一的数据库接口

     读写分离的原理

    多台 MySQL 服务器

    分别提供读、写服务,均衡流量

    通过主从复制保持数据一致性

    MySQL 代理面向客户端

    收到 SQL 写请求时,交给服务器 A 处理

    收到 SQL 读请求时,交给服务器 B 处理

    具体区分策略由服务设置        

    1)装包

    rpm -ivh maxscale-2.1.2-1.rhel.7.x86_64.rpm

    [root@host53~]#cd /soft/mysqld/

    [root@host53~]#rpm -qa | grep maxscale

    maxscale-2.1.2-1.x86_64

    [root@host53~]#rpm -qc maxscale                

    /etc/maxscale.cnf.template

    [root@host53~]#

    2)修改配置文件

    [root@host53~]#ls /etc/maxscale.cnf

    /etc/maxscale.cnf

    [root@host53~]#cp /etc/maxscale.cnf  /etc/maxscale.cnf.bak备份默认文件

    [root@host53~]#vim /etc/maxscale.cnf   //配置文件maxscale.cnf

    2)根据配置文件做相应的设置(2台数据库服务器上添加用户

    v //主库52添加,从库54自动同步

    监控数据库服务器时,连接数据库服务器的用户            《创建监控用户》

    mysql>grant replication slave,replication client on *.* to scalemon@'%'

    identified by "123456";

    验证访问数据时,连接数据库服务器使用的用户,是否在数据库服务器上存在的,连接用户                                               《创建路由用户》

    mysql>grant select on mysql.*to maxscale@'%' identified by  "123456";

    创建连接用户,通过这个用户名连接数据库,进行访问  《创建访问数据用户》

    mysql> grant all on *.* to student@'%' identified by  "123456";

    查看授权用户主库,从库

          mysql> select user,host from mysql.user where user in("scalemon","maxscale");

    4)验证在代理服务器上授权用户是否可以登入

    [root@host53~]#mysql -h192.168.4.52 -uscalemon -p123456

    [root@host53~]#mysql -h192.168.4.54 -umaxscale -p123456

    5)启动服务

    [root@host53~]#maxscale -f  /etc/maxscale.cnf

    6)查看服务进程和端口

    查看端口

    [root@host53~]#netstat -utnlp | grep :4006

    [root@host53~]#netstat -utnlp | grep:4018

    [root@host53~]#maxadmin  -P4018  -uadmin  -pmariadb

    MaxScale>list servers

    7)客户端访问数据读写分离服务器

    ]#which mysql

    ]#mysql -h192.168.4.53  -p4006 -ustudent -p123456

    mysql>select @@hostname;   //这条命令,查看的读取的主机host

    mysql>执行插入或查询(在5152本机查看记录)


     配置mysql多实例

    mysql多实例的原理

        mysql多实例,简单的说,就是在一台服务器上开启多个不同的mysql服务端口(如    33063307),运行多个mysql服务进程。这些服务进程通过不同的socket监听 不同的服务端口,来提供各自的服务。

    这些mysql实例共用一套mysql安装程序,使用不同的my.cnf配置文件、启动程序、 数据文件。在提供服务时,mysql多实例在逻辑上看来是各自独立的,各个实例之间 根据配置文件的设定值,来取得服务器的相关硬件资源。

    要求:在主机192.168.4.56配置mysql多实例:

    运行2个数据库服务

    ² 1个数据库服务数据库目录/dataone

    服务端口号3307

    sock文件/dataone/mysqld.sock

    日志文件/dataone/mysqld.log

    ² 2个数据库服务

    数据库目录/datatow

    服务端口号3308

    sock文件/datatwo/mysqld.sock

    日志文件/datatwo/mysqld.log环境准备

    Netstat - utnalp | grep:3307

    Netstat - utnalp | grep:3308

    1)下载软件

    [root@redhat~]#wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz

    [root@host50~]#tar -xf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz

    [root@host50~]#mv mysql-5.7.20-linux-glibc2.12-x86_64/usr/local/mysql

    [root@host56~]#echo "export PATH=/usr/local/mysql/bin:$PATH" >> /etc/profile

    [root@host56~]#source /etc/profile

    [root@host56~]#echo $PATH

    /usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

    2编辑配置文件

    ]#rm -rf /etc/my.cnf

    ]#vim /etc/my.cnf

    [mysqld_multi]

    mysqld=/usr/local/mysql/bin/mysqld_safe

    mysqladmin=/usr/local/mysql/bin/mysqladmin user=root

    [mysqld1]

    port=3307

    datadir=/dataone

    socket=/dataone/mysqld.sock

    log-error=/dataone/mysqld.log

    pid-file=/dataone/mysqld.pid

    [mysqld2]

    port=3308

    datadir=/datatwo

    socket=/datatwo/mysqld.sock

    log-error=/datatwo/mysqld.log

    pid-file=/datatwo/mysqld.pid

    :wq

    3根据配置文件的设置,做相应的配置

    3.1创建数据库目录

    3.2创建进程运行的所有者和组mysql

    [root@host56~]#mkdir -p /dataone

    [root@host56~]#mkdir -p /datatwo

    [root@host56~]#useradd mysql

    c[root@host56~]#chown mysql:mysql /data*

    3.3初始化授权库

    ]#mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/dataone  --initialize

    2018-05-05T08:47:48.992696Z 1[Note]A temporary password is generated for root@localhost:bXk.5j!pjto#

    [root@host56~]#ls /dataone/

    ]#mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/datatwo  --initialize

    2018-05-05T08:50:09.429934Z 1[Note]A temporary password is generated for root@localhost:bKsaf+xzk0V3

    [root@host56~]#ls /datatwo/

    4启动多实例服务

    [root@host56~]#mysqld_multi start 1

    [root@host56~]#mysqld_multi start 2

    [root@host56~]#netstat -utnlp | grep:3308

    tcp6 0 0:::3308:::*LISTEN 1156/mysqld

    [root@host56~]#netstat -utnlp | grep:3307

    tcp6 0 0:::3307:::*LISTEN 927/mysqld

    5访问多实例服务

    连接实例服务1

    [root@host56~]#mysql -uroot -p'bXk.5j!pjto#' -S  /dataone/mysqld.sock

    mysql>ALTER USER user()identified by"123456";

    mysql>show databases;

    [root@host56~#mysql -uroot -p123456 -S /dataone/mysqld.sock

    6连接实例服务2

    [root@host56~]#mysql -uroot -p'bKsaf+xzk0V3' -S    /datatwo/mysqld.sock

    mysql>alter user user() identified by"123456";

    mysql>show databases;

    [root@host56~]#mysql -uroot -p123456 -S  /datatwo/mysqld.sock

    7)停止启动的实例服务

    ]#mysqld_multi  --user=root --password=密码  stop 实例编号

    [root@host56~]#mysqld_multi --user=root --password=123456 stop 1

    [root@host56~]#netstat  -utnlp | grep:3307

    [root@host56~]#mysqld_multi --user=root --password=123456 stop 2

    [root@host56~]#netstat  -utnlp | grep:3308

    [root@host56~]#mysql -uroot -p123456 -S  /datatwo/mysqld.sock

    注意:启动不了,启动数据库

    *************************************************


    总结:

    mysql优化

    1启用慢查询日志

    vim/etc/my.cnf

    [mysqld]

    slow-query-loglong-query-time=2

    log-queries-not-using-indexes 

    :wq

    ]#systemctl restart mysqld

    ]#mysql-uroot-p123456

    mysql>select sleep(3);

    mysql>select sleep(5);

    查看日志文件内容

    ]#cat /var/lib/mysql/主机名-slow.log

    统计日志文件记录信息

    ~]#mysqldumpslow /var/lib/mysql/db55-slow.log > /tmp/sql.txt

    启用查询日志

    vim/etc/my.cnf

    [mysqld]

    general-log

    ]#systemctl restart mysqld

    ]#cat /var/lib/mysql/db55.log

    MySQL性能调优

    mysql>show variables like"%变量名%";

    •提高MySQL系统的性能、响应速度

    –替换有问题的硬件(CPU/磁盘/内存等)

    –服务程序的运行参数调整

    –对SQL查询进行优化

    1)查看变量

    mysql>show variables like"%time%";

    2)设置等待连接时间

    mysql>set innodb_lock_wait_timeout=100;

    3)查看允许最大并发连接

    mysql>show variables like"%max_connections%";

    4)更改连接时间

    mysql>set global max_connections=300;

    5)最大的使用连接

    mysql>show global status like"max_used_connections";

    6)刷新

    mysql>flush status;

    7)等待建立连接的超时秒数,默认10,只在登录时有效

    mysql>show variables like"%connect_timeout%";

    8)等待关闭连接的不活动超时秒数,默认28800(8小时)

    mysql>show variables like"%wait_timeout%";

    9缓存参数控制单位:字节

    •缓冲区、线程数量、开表数量

    含义

    key_buffer-size用于MyISAM引擎的关键索引缓存大小

    sort_buffer_size为每个要排序的线程分配此大小的缓存空间

    read_buffer_size为顺序读取表记录保留的缓存大小

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

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

    query_cache查询缓存

    +------------------------------+---------+--------------

    |Variable_name|Value|

    +------------------------------+---------+--------------

    |query_cache_limit|1048576|

    |query_cache_min_res_unit|4096|

    |query_cache_size|1048576|

    |query_cache_type|OFF|

    |query_cache_wlock_invalidate|OFF|

    +------------------------------+---------+---------------

    10查看当前的查询缓存统计

    mysql>show global status like"qcache%";

    11)所有软件没有独立的日志储存的地方

    [root@host52~]#vim /var/log/messages

    12记录慢查询

    ² 选项含义

    slow-query-log启用慢查询

    slow-query-log-file指定慢查询日志文件

    long-query-time超过指定秒数(默认10)的查询才被记录

    log-queries-not-using-indexes记录未使用索引的查询

    ² 调整服务配置

    [root@dbsvr1~]#vim /etc/my.cnf

    [mysqld]

    ....

    slow_query_log=1

    slow_query_log_file=mysql-slow.log

    long_query_time=5

    log_queries_not_using_indexes=1

    [root@dbsvr1~]#service mysql restart

    • 常用日志种类及选项<一般要开启>

    ² 类型用途配置

    错误日志记录启动/运行/停止过程中l og-error[=name]的错误消息

    查询日志记录客户端连接和查询操作general-log

    general-log-file=

    慢查询日志记录耗时较长或不使用索引查询操作slow-query-log

    slow-query-log-file=

    long-query-time=

    [root@host52 mysql]#vim /etc/my.cnf

    [mysqld]

    general-log//查询日志host52.log

    slow-query-log//慢查询日志host52-slow.log

    long-query-time=5

    log-queries-not-using-indexes

    [root@host52 mysql]#systemctl restart mysqld

    1)保存到新文件

    [root@host52 mysql]#mysqldumpslow host52-slow.log > /tmp/sql.txt

    2)动态查询记录文件日志

    [root@host52 mysql]#tail -f host52-slow.log

      ###########################################   


    办理主库从库快捷设置

        半开同步复制式   /et/my.cnf

           plugin-load= "rpl_semi_sync_master=semisync_master.so;

           rpl_semi_sync_slave=semisync_slave.so"

           rpl-semi-sync-master-enabled = 1

           rpl-semi-sync-slave-enabled = 1

     

    主库设置   /et/my.cnf

    [mysqld]

    #skip-grant-tables

    plugin-load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"

    rpl-semi-sync-master-enabled = 1

    rpl-semi-sync-slave-enabled = 1

    server_id=54

    log-bin=master54

    binlog-format="mixed"

    lower_case_table_names = 1

    validate_password_policy=0

    validate_password_length=6

     

    从库   /et/my.cnf

    [mysqld]

    skip-grant-tables

    server_id=56

    #validate_password_policy=0

    #validate_password_length=6

     

  • 相关阅读:
    Java 连oracle 12C 起步
    powershell excel 导入 sqlserver
    移动端适配方案(上)
    ie7兼容问题
    node学习第三天(2)
    node学习第三天(1)
    HTMl5的sessionStorage和localStorage的一些区别
    html5+css3实战之-幽灵按钮
    node.js理论知识梳理
    node.js学习第二天
  • 原文地址:https://www.cnblogs.com/qingbai/p/12015255.html
Copyright © 2011-2022 走看看