29_MySQL读写分离 MySQL多实例 、MySQL性能调优

版本:5.7.28

mysql51:192.168.4.51 主
mysql52:192.168.4.52 从
mysql50:192.168.4.50 客户机

1.实现MySQL读写分离
搭建一主一从结构
配置maxscale代理服务器
测试分离配置
 
1.1 搭建一主一从结构
192.168.4.51 主
192.168.4.52 从
测试OK
 
1.2 实现mysql读写分离
1.2.1 配置数据读写分离服务器:192.168.4.50
]# wget https://downloads.mariadb.com/MaxScale/2.1.2/rhel/7/x86_64/maxscale-2.1.2-1.rhel.7.x86_64.rpm
]# 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 [email protected]‘%‘ identified by "123qqq...A";
//监控数据库服务器时,连接数据库服务器的用户
mysql> grant select on mysql.* to [email protected]"%" 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
  PID TTY          TIME CMD
13665 ?        00:00:00 maxscale

]# netstat  -antup | grep maxscale
tcp  0 0 192.168.4.50:46746  192.168.4.51:3306  ESTABLISHED 13665/maxscale      
tcp  0 0 192.168.4.50:34570  192.168.4.52:3306  ESTABLISHED 13665/maxscale      
tcp6 0 0 :::4099             :::*               LISTEN      13665/maxscale      
tcp6 0 0 :::4006             :::*               LISTEN      13665/maxscale  
 
测试,在本机访问管理端口查看监控状态
maxadmin -P端口 -u用户名 -p密码
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 [email protected]"%" 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,
既读在52,写在51,读写分离
 
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 [email protected]: uB,:4o7TLw5d
 
]# mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/data3308 --initialize
...A temporary password is generated for [email protected]: B37?XppeaIqc
 
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  17757/mysqld        
]# netstat -utnlp  | grep :3308
tcp6    0    0 :::3308       :::*   LISTEN  17918/mysqld        
mysql]# ps -C mysqld
  PID TTY          TIME CMD
17757 pts/0    00:00:00 mysqld
17918 pts/0    00:00:00 mysqld
 
2.8 访问多实例
使用初始化密码登录多实例1(可以使用了)
]# mysql -u root -p‘uB,:4o7TLw5d‘ -S /data3307/mysql1.sock
mysql> alter user [email protected]"localhost" identified by ‘123456‘;
 
使用初始化密码登录多实例2(可以使用了)
]# mysql -u root -p‘B37?XppeaIqc‘ -S /data3308/mysql2.sock
mysql> alter user [email protected]"localhost" identified by ‘123456‘;
 
3.MySQL性能优化
练习相关优化选项
启用慢查询日志
查看各种系统变量、状态变量
 
3.1 mysql性能优化
3.1.1 查看服务运行时的参数配置
mysql> show variables\G
524个
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 | 3     |
+----------------------+-------+
 
查看默认的最大连接数
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_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), [email protected]
 
查看缓存的大小
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       |
+-------------------------+---------+

原文地址:https://www.cnblogs.com/luwei0915/p/12258221.html

时间: 2024-10-10 20:40:21

29_MySQL读写分离 MySQL多实例 、MySQL性能调优的相关文章

Mysql千万级数据性能调优配置

背景: 笔者的源数据一张表大概7000多万条,数据大小36G,索引6G,加起来表空间有40G+,类似的表有4张,总计2亿多条 数据库mysql,引擎为innodb,版本5.7,服务器内存256G,物理内存几个T,硬件参数杠杠的,然而处理这些数据踩了不少坑,因 为之前没做过这方面的工作,现在记录下清洗的过程,详细的业务清洗过程和规则均记录在https://gitee.com/yanb618/zhirong/wikis 感受: 清洗从表名,字段名,字段类型,字段值,索引创建与删除做起,每每看到那秒数

实现MySQL读写分离,MySQL性能调优

实现MySQL读写分离 1.1 问题 本案例要求配置2台MySQL服务器+1台代理服务器,实现MySQL代理的读写分离: 用户只需要访问MySQL代理服务器,而实际的SQL查询.写入操作交给后台的2台MySQL服务器来完成 其中Master服务器允许SQL查询.写入,Slave服务器只允许SQL查询 1.2 方案 使用4台RHEL 7.2虚拟机,如图-1所示.其中192.168.4.10.192.168.4.20分别作为MySQL主.从服务器,是整个服务的后端:另一台 192.168.4.100

Database基础(六):实现MySQL读写分离、MySQL性能调优

一.实现MySQL读写分离 目标: 本案例要求配置2台MySQL服务器+1台代理服务器,实现MySQL代理的读写分离: 用户只需要访问MySQL代理服务器,而实际的SQL查询.写入操作交给后台的2台MySQL服务器来完成 其中Master服务器允许SQL查询.写入,Slave服务器只允许SQL查询 方案: 使用4台RHEL 7.2虚拟机,如下图所示.其中192.168.4.10.192.168.4.20分别作为MySQL主.从服务器,是整个服务的后端:另一台 192.168.4.100作为MyS

主从同步、读写分离、mysql性能调优(软优化)

配置mysql主从同步1 主从同步的作用:让slave身份的数据库服务器自动同步 master身份的数据库服务器上的数据. 一.主数据库服务器的配置192.168.4.121 用户授权mysql> grant replication slave on *.* to [email protected]"192.168.4.11" identified by "123456";2 启用binlog日志vim /etc/my.cnf[mysqld]server_id

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

说明文档:http://dev.mysql.com/doc/refman/5.1/en/connector-j-reference-replication-connection.html 代码例子: 1 import java.sql.Connection; 2 import java.sql.ResultSet; 3 import java.util.Properties; 4 5 import com.mysql.jdbc.ReplicationDriver; 6 7 public clas

全栈必备——MySQL性能调优

对于全栈而言,数据库技能不可或缺,关系型数据库或者nosql,内存型数据库或者偏磁盘存储的数据库,对象存储的数据库或者图数据库--林林总总,但是第一必备技能还应该是MySQL.从LAMP的兴起,到Mariadb的出现,甚至PG的到来,熟练的MySQL技能都是大有用武之地的. MySQL数据库技术的方方面面也是很多,这里只涉及必备的性能调优,推崇从下向上的性能调优,主要包括运行环境,配置参数,SQL性能,和系统架构设计调优. 运行环境调优 这里是Linux的天下,MySQL 运行环境的调优往往和L

MySQL性能调优与架构设计——第 17 章 高可用设计之思路及方案

第 17 章 高可用设计之思路及方案 前言: 数据库系统是一个应用系统的核心部分,要想系统整体可用性得到保证,数据库系统就不能出现任何问题.对于一个企业级的系统来说,数据库系统的可用性尤为重要.数据库系统一旦出现问题无法提供服务,所有系统都可能无法继续工作,而不像软件中部分系统出现问题可能影响的仅仅只是某个功能无法继续服务.所以,一个成功的数据库架构在高可用设计方面也是需要充分考虑的.本章内容将针对如何构建一个高可用的 MySQL 数据库系统来介绍各种解决方案以及方案之间的比较. 17.1 利用

MySQL性能调优与架构设计——第 14 章 可扩展性设计之数据切分

第 14 章 可扩展性设计之数据切分 前言 通过 MySQL Replication 功能所实现的扩展总是会受到数据库大小的限制,一旦数据库过于庞大,尤其是当写入过于频繁,很难由一台主机支撑的时候,我们还是会面临到扩展瓶颈.这时候,我们就必须许找其他技术手段来解决这个瓶颈,那就是我们这一章所要介绍恶的数据切分技术. 14.1 何谓数据切分 可能很多读者朋友在网上或者杂志上面都已经多次见到关于数据切分的相关文章了,只不过在有些文章中称之为数据的 Sharding.其实不管是称之为数据的 Shard

MySQL 性能调优

MySQL 性能调优 索引 索引是什么 官方介绍索引是帮助MySQL高效获取数据的数据结构.笔者理解索引相当于一本书的目录,通过目录就知道要的资料在哪里,不用一页一页查阅找出需要的资料. 索引目的 索引的目的在于提高查询效率,可以类比字典,如果要查“mysql”这个单词,我们肯定需要定位到m字母,然后从下往下找到y字母,再找到剩下的sql.如果没有索引,那么你可能需要把所有单词看一遍才能找到你想要的,如果我想找到m开头的单词呢?或者ze开头的单词呢?是不是觉得如果没有索引,这个事情根本无法完成?

MySQL基础普及《MySQL管理之道:性能调优、高可用与监控》

最近工作的内容涉及MySQL运维内容,陆陆续续读了几本相关的书,其中一本是<MySQL管理之道:性能调优.高可用与监控>. 内容涵盖性能调优(包括sql优化等).备份.高可用,以及读写分离等,对于普及MySQL基础非常有用.记录一下,以便于后面查阅. 附目录: 1章 MariaDB架构与历史1 1.1 MariaDB的介绍 1 1.2 MariaDB和MySQL的兼容性 2 1.3 MariaDB 10.0新增的功能 3 1.3.1 更多的存储引擎 4 1.3.2 速度的提升 5 1.3.3