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. vmware vSphere Data Protection 6.1--------2-初始化

    一.简介 安装完vdp接下来就是部署初始化了 安装篇请参考:vmware vSphere Data Protection 6.1部署 二.开始初始化 登陆https://192.168.216.200 ...

  2. Flask基础原理

    一.Flask简介 Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架. Werkzeug的本质是Socket服务端,用于接收http请求并对请 ...

  3. 《你不知道的Javascript》感悟篇—对象属性遍历的那些事

    划重点 本篇笔者将重点介绍JavaScript中 getOwnPropertyNames .Object.keys.for ... in 的使用及他们之间的异同点. getOwnPropertyNam ...

  4. setTimeout()方法和setInterval()方法

    setTimeout方法: 定义和用法: setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式. tip: 1000 毫秒= 1 秒. tip:  如果你只想重复执行可以使用setI ...

  5. windows系统Android-sdk的下载与环境变量配置

    最近一段时间在做app的开发,作为前端而言,开发app并不像android工程师那样熟悉android开发:无论是使用cordova.js或者react-native开发都需要配置android开发环 ...

  6. 【leetcode】366.Find Leaves of Binary Tree

    原题 Given a binary tree, collect a tree's nodes as if you were doing this: Collect and remove all lea ...

  7. javascript_08-while 和 do while

    while 和 do while for 当循环次数已知 while 先判断再执行 do while 先执行一次再判断 //1-100 之间所有数字的和 //while // var i = 1; / ...

  8. JAVA笔记整理(十),JAVA中的File

    File类提供对针对目录和文件的读写改等一系列操作方法 创建: public class FileDemo01 { public static void main(String[] args) { t ...

  9. clamscan-Linux查毒工具

    转载:https://www.cnblogs.com/tdcqma/p/7576183.html clamscan命令用于扫描文件和目录,一发现其中包含的计算机病毒,clamscan命令除了扫描lin ...

  10. WebClient 与HttpClient 的区别

    需要搜索下资料. -------------------------------------------------- 微软文档介绍,新的开发中推荐使用:HttpClient WebClient 文档 ...