1.实现MySQL读写分离
搭建一主一从结构
配置maxscale代理服务器
测试分离配置
 
1.1 搭建一主一从结构
192.168.4.51 主
192.168.4.52 从
测试OK
 
1.2 实现mysql读写分离
1.2.1 配置数据读写分离服务器:192.168.4.50
]# yum -y install maxscale-2.1.2-1.rhel.7.x86_64.rpm
1.2.2 配置maxscale
]# vim /etc/maxscale.cnf
[maxscale]
threads=auto            //运行的线程的数量
 
[server1]            //定义数据库服务器
type=server
address=192.168.4.51        //数据库服务器的ip
port=3306
protocol=MySQLBackend        //后端数据库
 
[server2]
type=server
address=192.168.4.52
port=3306
protocol=MySQLBackend
 
[MySQL Monitor]             //定义监控的数据库服务器
type=monitor
module=mysqlmon
servers=server1, server2    //监控的数据库列表,不能写ip
user=scalemon               //监视数据库服务器时连接的用户名scalemon
passwd=123qqq...A           //密码123456
monitor_interval=10000      //监视的频率 单位为秒
 
#[Read-Only Service]        //不定义只读服务器
#type=service
#router=readconnroute
#servers=server1
#user=myuser
#passwd=mypwd
#router_options=slave
 
[Read-Write Service]      //定义读写分离服务
type=service
router=readwritesplit
servers=server1, server2
user=maxscaled            //用户名 验证连接代理服务时访问数据库服务器的用户是否存在
passwd=123qqq...A         //密码
max_slave_connections=100%
 
[MaxAdmin Service]        //定义管理服务
type=service
router=cli
 
#[Read-Only Listener]     //不定义只读服务使用的端口号
#type=listener
#service=Read-Only Service
#protocol=MySQLClient
#port=4008
 
[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=4099     //手动添加,不指定时使用的是默认端口在启动服务以后可以知道默认端口是多少
 
1.2.3 根据配置文件的设置,在数据库服务器上添加授权用户(主库执行,从库查看)
mysql> grant replication slave,replication client on *.* to scalemon@'%' identified by "123qqq...A";  
//监控数据库服务器时,连接数据库服务器的用户
mysql> grant select on mysql.* to maxscaled@"%" identified by "123qqq...A"; 
//验证 访问数据时,连接数据库服务器使用的用户,是否在数据库服务器上存在的,连接用户
 
查看授权用户
在主库上面查看
mysql> select user,host from mysql.user where user in ("scalemon","maxscaled");
在从库上面查看
mysql> select user,host from mysql.user where user in ("scalemon","maxscaled"); 
+-----------+------+
| user      | host |
+-----------+------+
| maxscaled | %    |
| scalemon  | %    |
+-----------+------+
 
1.2.4 测试授权用户(50)
]# mysql -h 192.168.4.51 -u scalemon -p123qqq...A
]# mysql -h 192.168.4.52 -u scalemon -p123qqq...A
]# mysql -h 192.168.4.51 -u maxscaled -p123qqq...A
]# mysql -h 192.168.4.52 -u maxscaled -p123qqq...A
 
1.2.5 启动服务(50)
]# maxscale -f /etc/maxscale.cnf
]# ps -C maxscale   //查看进程
]#  ps -C  maxscale 
  PID TTY          TIME CMD
20806 ?        00:00:00 maxscale
]# netstat  -antup | grep maxscale
tcp  0  0 192.168.4.50:60920  192.168.4.52:3306   ESTABLISHED 20806/maxscale      
tcp  0  0 192.168.4.50:42304  192.168.4.51:3306   ESTABLISHED 20806/maxscale      
tcp6 0  0 :::4099             :::*                LISTEN      20806/maxscale      
tcp6 0  0 :::4006             :::*                LISTEN      20806/maxscale      
 
1.2.5 测试,在本机访问管理端口查看监控状态
maxadmin -P端口 -u用户名 -p密码
]# maxadmin -P4099 -uadmin -pmariadb
MaxScale> list servers 
Servers.
-------------------+-----------------+-------+-------------+--------------------
Server             | Address         | Port  | Connections | Status              
-------------------+-----------------+-------+-------------+--------------------
server1            | 192.168.4.51    |  3306 |           0 | Master, Running
server2            | 192.168.4.52    |  3306 |           0 | Slave, Running
-------------------+-----------------+-------+-------------+----------------
 
1.2.6 在客户端访问读写分离服务器(53)
51上授权一个可以访问数据的用户
mysql> GRANT ALL ON *.* TO jim@"%" identified by "123qqq...A";
从库52查看
mysql> SELECT user,host FROM mysql.user where user='jim';
+------+------+
| user | host |
+------+------+
| jim  | %    |
+------+------+
53连接读写分离服务器50
]# mysql -h192.168.4.50 -P4006 -ujim -p123qqq...A
mysql> select @@hostname;
+------------+
| @@hostname |
+------------+
| mysql52    |
+------------+
mysql> CREATE DATABASE lisi;
此时,53从50登录(写入数据),数据直接写入51,同步到52
 
2.配置MySQL多实例
直接用50主机
2.1 清理配置
]# systemctl stop mysqld
]# mv /etc/my.cnf /root/
]# tar -zxvf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz
]# mv mysql-5.7.20-linux-glibc2.12-x86_64 /usr/local/mysql
]# ls /usr/local/mysql
bin  COPYING  docs  include  lib  man  README  share  support-files
 
2.1 编写配置文件
]# 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=/data3307        //数据库目录 ,要手动创建
socket=/data3307/mysql1.sock     //指定sock文件的路径和名称
pid-file=/data3307/mysql1.pid       //进程pid号文件位置
log-error=/data3307/mysql1.err    //错误日志位置 
 
[mysqld2]
port=3308
datadir=/data3308
socket=/data3308/mysql2.sock
pid-file=/data3308/mysql2.pid
log-error=/data3308/mysql2.err 
 
2.2 创建数据库目录
]# mkdir -p /data3307
]# mkdir -p /data3308
 
2.3 创建进程运行的所有者和组 mysql
]# useradd mysql
]# chown mysql:mysql /data*
 
2.4 初始化授权库
]# mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/data3307 --initialize
...A temporary password is generated for root@localhost: 2Zmil6eiwd:.
 
]# mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/data3308 --initialize
...A temporary password is generated for root@localhost: ojeidv8Uhj/;
 
2.5 调整PATH变量
]# echo  "export  PATH=/usr/local/mysql/bin:$PATH" \ 
 >> /etc/profile
]# source /etc/profile
]# echo $PATH
 
2.6 启动多实例
]# mysqld_multi start 1 //1为实例编号
]# mysqld_multi start 2
 
2.7 查看端口
]# netstat -utnlp  | grep :3307
tcp6    0    0 :::3307       :::*   LISTEN  21717/mysqld        
]# netstat -utnlp  | grep :3308
tcp6    0    0 :::3308       :::*   LISTEN   21911/mysqld        
]#  ps -C mysqld
  PID TTY          TIME CMD
21717 pts/1    00:00:00 mysqld
21911 pts/1    00:00:00 mysqld
 
2.8 访问多实例
使用初始化密码登录多实例1(可以使用了)
]# mysql -u root -p'R?N:ou4aBGLt' -S /data3307/mysql1.sock
mysql> alter user root@"localhost" identified by '123456'; 
 
使用初始化密码登录多实例2(可以使用了)
]# mysql -u root -p'ojeidv8Uhj/;' -S /data3308/mysql2.sock
mysql> alter user root@"localhost" identified by '123456'; 
 
3.MySQL性能优化
练习相关优化选项
启用慢查询日志
查看各种系统变量、状态变量
 
3.1 mysql性能优化
3.1.1 查看服务运行时的参数配置
mysql> show variables\G
509个
mysql> show variables like "%innodb%";
134个
 
3.1.2 并发连接数量
mysql>  FLUSH STATUS;
mysql> show global status like "Max_used_connections";
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| Max_used_connections | 4     |
+----------------------+-------+
 
查看默认的最大连接数
mysql> show variables like "max_connections%";
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 151   |
+-----------------+-------+
 
3.1.3 连接超时时间
mysql> show variables like "%timeout%"; 
+------------------------------+----------+
| Variable_name                | Value    |
+------------------------------+----------+
| connect_timeout              | 10       |
| delayed_insert_timeout       | 300      |
| have_statement_timeout       | YES      |
| innodb_flush_log_at_timeout  | 1        |
| innodb_lock_wait_timeout     | 50       |
| innodb_rollback_on_timeout   | OFF      |
| interactive_timeout          | 28800    |
| lock_wait_timeout            | 31536000 |
| net_read_timeout             | 30       |
| net_write_timeout            | 60       |
| rpl_semi_sync_master_timeout | 10000    |
| rpl_stop_slave_timeout       | 31536000 |
| slave_net_timeout            | 60       |
| wait_timeout                 | 28800    |
+------------------------------+----------+
 
3.1.4 允许保存在缓存中被重用的线程数量
mysql> show variables like "thread_cache_size";
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| thread_cache_size | 9     |
+-------------------+-------+
 
3.1.5 用于MyISAM引擎的关键索引缓存大小
mysql> show variables like "key_buffer_size";
+-----------------+---------+
| Variable_name   | Value   |
+-----------------+---------+
| key_buffer_size | 8388608 |
+-----------------+---------+
 
3.1.6 为每个要排序的线程分配此大小的缓存空间
mysql> show variables like "sort_buffer_size";
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| sort_buffer_size | 262144 |
+------------------+--------+
 
3.1.7 为顺序读取表记录保留的缓存大小
mysql> show variables like "read_buffer_size";
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| read_buffer_size | 131072 |
+------------------+--------+
 
3.1.8 为所有线程缓存的打开的表的数量
mysql> show variables like "table_open_cache";
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| table_open_cache | 2000  |
+------------------+-------+
 
3.2 SQL查询优化
启用慢查询日志
]# vim /etc/my.cnf
...
slow_query_log=1
slow_query_log_file=mysql-slow.log
long_query_time=5
log_queries_not_using_indexes=1
 
查看慢查询日志
]# mysqldumpslow /var/lib/mysql/mysql-slow.log
Reading mysql slow query log from /var/lib/mysql/mysql-slow.log
Count: 1  Time=0.00s (0s)  Lock=0.00s (0s)  Rows=0.0 (0), 0users@0hosts
 
查看缓存的大小
mysql> show variables like "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     |
+------------------------------+---------+
 
查看当前的查询缓存统计
mysql> show global status like "qcache%";
+-------------------------+---------+
| Variable_name           | Value   |
+-------------------------+---------+
| Qcache_free_blocks      | 1       |
| Qcache_free_memory      | 1031832 |
| Qcache_hits             | 0       |
| Qcache_inserts          | 0       |
| Qcache_lowmem_prunes    | 0       |
| Qcache_not_cached       | 24      |
| Qcache_queries_in_cache | 0       |
| Qcache_total_blocks     | 1       |
+-------------------------+---------+

三十五.MySQL读写分离 MySQL多实例 、MySQL性能调优的更多相关文章

  1. 鲲鹏性能优化十板斧之前言 | 鲲鹏处理器NUMA简介与性能调优五步法

    鲲鹏处理器NUMA简介 随着现代社会信息化.智能化的飞速发展,越来越多的设备接入互联网.物联网.车联网,从而催生了庞大的计算需求.但是功耗墙问题以功耗和冷却两大限制极大的影响了单核算力的发展.为了满足 ...

  2. 鲲鹏性能优化十板斧(二)——CPU与内存子系统性能调优

    1.1 CPU与内存子系统性能调优简介 调优思路 性能优化的思路如下: l   如果CPU的利用率不高,说明资源没有充分利用,可以通过工具(如strace)查看应用程序阻塞在哪里,一般为磁盘,网络或应 ...

  3. 学会使用MySQL的Explain执行计划,SQL性能调优从此不再困难

    上篇文章讲了MySQL架构体系,了解到MySQL Server端的优化器可以生成Explain执行计划,而执行计划可以帮助我们分析SQL语句性能瓶颈,优化SQL查询逻辑,今天就一块学习Explain执 ...

  4. MySQL 读写分离 使用驱动com.mysql.jdbc.ReplicationDriver

    说明文档:http://dev.mysql.com/doc/refman/5.1/en/connector-j-reference-replication-connection.html 代码例子: ...

  5. mysql运维入门6:MySQL读写分离

    Amoeba 以MySQL为底层数据存储,并对应用提供MySQL协议接口的proxy 集中想用应用的请求,根据用户事先设置的规则,将SQL请求发送到特定的数据库上执行 基于此可以实现负载均衡.读写分离 ...

  6. OCM_第十五天课程:Section6 —》数据库性能调优 _SQL 访问建议 /SQL 性能分析器/配置基线模板/SQL 执行计划管理/实例限制

    注:本文为原著(其内容来自 腾科教育培训课堂).阅读本文注意事项如下: 1:所有文章的转载请标注本文出处. 2:本文非本人不得用于商业用途.违者将承当相应法律责任. 3:该系列文章目录列表: 一:&l ...

  7. OCM_第十四天课程:Section6 —》数据库性能调优_各类索引 /调优工具使用/SQL 优化建议

    注:本文为原著(其内容来自 腾科教育培训课堂).阅读本文注意事项如下: 1:所有文章的转载请标注本文出处. 2:本文非本人不得用于商业用途.违者将承当相应法律责任. 3:该系列文章目录列表: 一:&l ...

  8. centos MySQL主从配置 ntsysv chkconfig setup命令 配置MySQL 主从 子shell MySQL备份 kill命令 pid文件 discuz!论坛数据库读写分离 双主搭建 mysql.history 第二十九节课

    centos  MySQL主从配置 ntsysv   chkconfig  setup命令  配置MySQL 主从 子shell  MySQL备份  kill命令  pid文件  discuz!论坛数 ...

  9. 分库分布的几件小事(五)MYSQL读写分离

    1.为什么进行读写分离 这个,高并发这个阶段,那肯定是需要做读写分离的,啥意思?因为实际上大部分的互联网公司,一些网站,或者是app,其实都是读多写少.所以针对这个情况,就是写一个主库,但是主库挂多个 ...

随机推荐

  1. 机器学习-EM算法-GMM模型笔记

    GMM即高斯混合模型,下面根据EM模型从理论公式推导GMM: 随机变量X是有K个高斯分布混合而成,取各个高斯分布的概率为φ1,φ2,... ,φK,第i个高斯分布的均值为μi,方差为Σi.若观测到随机 ...

  2. 【HC89S003F4开发板】 1环境搭建

    HC89S003F4开发板环境搭建 一.概述 芯圣电子做活动,一个开发板只用一块钱,买过来玩玩.︿( ̄︶ ̄)︿ 全套资料可以在论坛或qq群里下载.总之先安装个环境先. 二.安装Keil C51 作为增 ...

  3. 【计数DP】种树

    种树 题目描述 事实上,小X邀请两位奆老来的目的远不止是玩斗地主,主要是为了抓来苦力,替他的后花园种树……小X的后花园是环形的,他想在花园周围均匀地种上n棵树,但是奆老花园的土壤当然非同寻常,每个位置 ...

  4. Shiro授权及注解式开发

    目的: shiro授权 shiro注解式开发 Shiro授权 首先设计shiro权限表: 从图中我们也清晰的看出五张表之间的关系 ShiroUserMapper Set<String> g ...

  5. 解决warning: Clock skew detected. Your build may be incomplete

    原因:机器系统时间与文件时间不一致 解决:更新所有文件的时间后重新编译 find . -type f | xargs -n 5 touch make clean make xargs  -n num ...

  6. 撸一个 vue 的截图组件,按比例截取

    <template> <div class="clip-img" :style="imgStyle"> <img :src=&qu ...

  7. Math.random()的加密安全替换方法window.crypto.getRandomValues

    Math.random() 返回介于 0(包含) ~ 1(不包含) 之间的一个随机数. Math.random()函数不是加密安全的随机数生成器. window.crypto.getRandomVal ...

  8. 快速批量删除 docker 镜像或容器

    原文:快速批量删除 docker 镜像或容器 点击在我的博客 xuxusheng.com 中查看,有更好的排版哦~ docker 本身并没有提供批量删除的功能,当有大量的镜像或者容器需要删除的时候,手 ...

  9. 用Python爬取小说《一念永恒》

    我们首先选定从笔趣看网站爬取这本小说. 然后开始分析网页构造,这些与以前的分析过程大同小异,就不再多叙述了,只需要找到几个关键的标签和user-agent基本上就可以了. 那么下面,我们直接来看代码. ...

  10. 自定义过滤器和标签 & 静态文件相关

    自定义过滤器和标签 1.在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag. 2.在app中创建templatetags模块(模块名 ...