数据库基础之07(mysql数据读写分离、mysql多实例、mysql性能调优)

目录

1-1、mysql数据读写分离介绍:

 

1-2、配置mysql数据读写分离服务:

1-2-1、配置mysql主从同步结构(一主(192.168.4.51)、一从(192.168.4.52)):

1-2-2、代理服务器安装maxscale软件

1-3、主库授权:

1-4、在代理服务器192.168.4.53主机上测试授权用户

1-5、在代理服务器192.168.4.53主机上启动maxscale服务

1-6、客户端192.168.4.50来访问代理服务并以主从复制结构数据库授权的用户名和密码来对所授权的库里的表进行读写操作,查看是否实现了读写分离。

2、mysql多实例:在一台虚拟机上运行多个mysql数据库服务

扫描二维码关注公众号,回复: 2554761 查看本文章

2-1、检查环境

2-2、安装多实例

2-3、修改全局变量

2-4、备份主配置文件

2-5、修改配置文件

2-6、创建相关的目录、初始化数据库、启动数据库、临时密码登陆、修改新密码

3、mysql性能调优:

3-1、cpu方面的:

3-2、内存方面的:

3-3、存储设备:磁盘转速不低于15000/s,最好是固态盘,查看I/O

3-4、查看数据库服务运行时的运行参数(查看变量)

3-5、影响数据库服务性能的值:

3-6、连接超时时间:

3-7、可以重复使用的线程数量:

3-8、可以打开的表的数量的限制

3-9、缓存的设置:

3-10、查看查询缓存统计信息:

 3-11、程序员编写的sql查询命令太复杂,导致数据库服务器处理慢。




1-1、mysql数据读写分离介绍:

 

mysql数据读写分离:把客户端查询数据库的请求和写入数据的请求,分别转给不同的数据库服务器来处理。

mysql数据读写分离结构的目的:减轻主库的并发访问压力,提高从库的硬件利用率。

部署实现mysql数据读写分离服务:mysql中间件(比如mycat、mysql-proxy、maxscale)

1-2、配置mysql数据读写分离服务:


1-2-1、配置mysql主从同步结构(一主(192.168.4.51)、一从(192.168.4.52)):

1-2-1-1、对指定库的异地同步
同步子前,需要将主库的所有数据完全备份后再在从库上完全恢复数据,先保证主从库数据的一致.

1-2-1-2、mysql主-->从复制架构的实现
主master库(192.168.4.51)配置如下:
(1)、启用binglog日志文件
[mysqld]
server_id=51
log-bin=master51
binlog_format="mixed"

(2)、用户授权:给从库添加连接时使用的用户名
grant replication slave on *.* to repluser@"192.168.4.52" identified by "123qqq...A";

(3)、查看正在使用的binglog日志信息
show master status;

1-2-1-3、从slave库(192.168.4.52)配置如下:
(1)、指定server_id
[mysqld]
server_id=52
systemctl restart mysqld

(2)、测试授权用户:mysql -uroot -p123456----先用本机帐号登陆
show slave status\G;---查询从库状态信息
Empty set (0.00 sec)---将会显示为空

(3)、管理本机登陆指定主库信息
change master to master_host="192.168.4.51",master_user="repluser",master_password="123qqq...A",
master_log_file="master51.000001",master_log_pos=750;
start slave;

(4)、查看配置
show slave status\G;---重新查询从库状态信

1-2-1-4、在主库上管理员本机登陆,创建库和表,并且授权客户端连接本机数据库的用户名和密码:

create database testdb;
create table testdb.t1(id int);
insert into testdb.t1 values(11);
grant select,insert on testdb.* to yaya99@"%" identified by "123qqq...A";
1-2-1-4、客户端连接主库数据库,select和insert
1-2-1-5、从库本机登陆,select查看一下是否已同步

1-2-2、代理服务器安装maxscale软件

2-2-1、代理服务器(192.168.4.53)上的操作:

yum -y install maxscale-2.1.2-1.rhel.7.x86_64.rpm----安装maxscale软件

rpm -qa | grep -i maxscale-----查看是否安装成功
rpm -qc maxscale------查看配置文件有哪些
cp /etc/maxscale.cnf   /etc/maxscale.cnf.bak---复制一份配置文件,以防误操作
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2-2-2、/vim /etc/maxscale.cnf
[maxscale]
 10 threads=auto---线程数根据cpu核数自动设置

定义server1关联的主机的相关信息

18 [server1]
 19 type=server
 20 address=192.168.4.51---指定访问的主机
 21 port=3306-----指定访问的主机的端口

定义server2关联的主机的相关信息
 23 [server2]
 24 type=server
 25 address=192.168.4.52
 26 port=3306
 27 protocol=MySQLBackend

相关的监控信息,监控的用户需要对后端数据库有访问replication client的权限
[MySQL Monitor]
 36 type=monitor----类型为监视类型
 37 module=mysqlmon-----监视模块名
 38 servers=server1,  server2---监视的数据库服务器(监控数据库服务的状态信息和主从同步的状态)注意server1,空格server2
 39 user=scalemon----监视主从复制结构数据库状态信息及主从同步状态时用来连接数据库的用户名,
 40 passwd=123qqq...A---监视主从复制结构数据库状态信息及主从同步状态时用来连接数据库的密码,用户名和密码需要在主库上授权
 41 monitor_interval=10000----单位为毫秒,即每10000毫秒监视一次

detect_replication_lag=true #监控主从同步状态和信息
detect_stale_master=true #监控主从复制 slave全部挂掉时,所有访问全部指向master

注意:注释掉下面这段
##############################################################
52 #[Read-Only Service]
 53 #type=service
 54 #router=readconnroute
 55 #servers=server1
 56 #user=myuser
 57 #passwd=mypwd
 58 #router_options=slave
###############################################################
定义读写分离在哪些服务器上操作:
63 [Read-Write Service]----读写分离,用户需要有select on mysql.db;select on myslq.tables_priv;select on mysql.columns_priv的权限,然后才能知道客户端连接代理服务器的用户名和密码有没有被主从数据库授权。

64 type=service
 65 router=readwritesplit---路由读和写
 66 servers=server1,  server2----连接的数据库主机
 67 user=maxscale----连接数据库主机select on mysql.*时被授权的用户名
 68 passwd=123qqq...A----连接数据库主机select on mysql.*时被授权的密码
 69 max_slave_connections=100%


定义管理服务:
75 [MaxAdmin Service]
 76 type=service
 77 router=cli---在命令行管理


注意:注释掉下面这段
##############################################################
85 #[Read-Only Listener]
 86 #type=listener
 87 #service=Read-Only Service
 88 #protocol=MySQLClient
 89 #port=4008
##############################################################
管理读写分离服务:
 91 [Read-Write Listener]
 92 type=listener
 93 service=Read-Write Service----读写分离服务在Read-Write Service上进行来实现
 94 protocol=MySQLClient
 95 port=4006----读写分离服务使用的端口号
管理读写分离服务:
 97 [MaxAdmin Listener]
 98 type=listener
 99 service=MaxAdmin Service----管理读写分离服务在MaxAdmin Service上进行
100 protocol=maxscaled
101 socket=default
102 port=4016---附加的自定义的端口号,不自定义则从1024----65536随即选择
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

1-3、主库授权:

grant replication slave,replication client  on *.* to scalemon@"%" identified by "123qqq...A";

REPLICATION CLIENT 使得用户可以使用SHOW MASTER STATUS和SHOW SLAVE STATUS命令,也就是说这个权限是用于授予账户监视Replication状况的权力。

REPLICATION SLAVE则是一个必须而基本的权限,它直接授予slave服务器以该账户连接master后可以执行replicate操作的权利。

grant select on mysql.* to maxscale@"%" identified by "123qqq...A";

select user from mysql.user where user in ("scalemon","maxscale");-----主从库上查看一下来确定已授权成功

1-4、在代理服务器192.168.4.53主机上测试授权用户

]# which  mysql----查看有没有mysql客户端软件
]# yum  -y  install mariadb----如没有则安装
]# mysql  -h192.168.4.51  -uscalemon  -p123qqq...A
]# mysql  -h192.168.4.52  -uscalemon  -p123qqq...A
]# mysql  -h192.168.4.51  -umaxscale   -p123qqq...A
]# mysql  -h192.168.4.52  -umaxscale   -p123qqq...A

1-5、在代理服务器192.168.4.53主机上启动maxscale服务

maxscale  -f /etc/maxscale.cnf------起服务

pkill  -9 maxscale-----若需要停服务用此命令

netstat -utnlp | grep -i  maxscale-----查看进程

tcp    LISTEN     0      128      :::4016                 :::*                   users:(("maxscale",pid=3084,fd=12))
tcp    LISTEN     0      128      :::4006                 :::*                   users:(("maxscale",pid=3084,fd=11))

maxadmin  -uadmin  -pmariadb  -P4016------在192.168.4.53本机访问管理服务,查看监控信息

MaxScale> list servers----列出所监控的server主机的信息
Servers.
-------------------+-----------------+-------+-------------+--------------------
Server             | Address         | Port  | Connections | Status              
-------------------+-----------------+-------+-------------+--------------------
server1            | 192.168.4.51    |  3306 |           1 | Master, Running
server2            | 192.168.4.52    |  3306 |           1 | Slave, Running
-------------------+-----------------+-------+-------------+--------------------

1-6、客户端192.168.4.50来访问代理服务并以主从复制结构数据库授权的用户名和密码来对所授权的库里的表进行读写操作,查看是否实现了读写分离。

mysql -h192.168.4.53 -P4006 -uyaya99 -p"123qqq...A"----这里-P一定要跟的是读写分离服务的端口号,负责将无法实现读写分离服务,因为只有该端口定义了读写分离功能。

2、mysql多实例:在一台虚拟机上运行多个mysql数据库服务

配置多实例的操作如下:


2-1、检查环境

rpm -qa | grep -i mysql---先查看主机上是否已安装mysql服务
systemctl stop mysqld-----停止服务
systemctl disable mysqld-----不要开机自启

2-2、安装多实例

下载 mysql-5.7.20-linux-glibc2.12x86_64.tar.gz多实例软件包
tar -xf  mysql-5.7.20-linux-glibc2.12x86_64.tar.gz
mv mysql-5.7.20-linux-glibc2.12x86_64      /usr/local/mysql---将解压好的多实例软件包放到/usr/local/下
并重新命名为mysql

2-3、修改全局变量

vim  /etc/profile

export  PATH=/usr/local/mysql/bin:$PATH ----添加执行文件路径的变量:$PATH,此外多实例软件mysql-5.7.20-linux-glibc2.12x86_64下的bin目录里存放了其所有的命令,做次步只是为了以后启用命令时不写命令的绝对路径

:wq

echo $PATH------查看是否添加执行文件路径的变量:$PATH成功

2-4、备份主配置文件

mv   /etc/my.cnf   /etc/my.cnf.bak------做此步是为了以后恢复数据库有数据库主配置文件

2-5、修改配置文件

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/mysql.sock
pid-file = /data3307/mysqld.pid
log-error = /data3307/mysqld.err

[mysqld2]
port = 3308
datadir = /data3308
socket = /data3308/mysql.sock
pid-file = /data3308/mysqld.pid
log-error = /data3308/mysqld.err

[mysqld3]
port = 3309
datadir = /data3309
socket = /data3309/mysql.sock
pid-file = /data3309/mysqld.pid
log-error = /data3309/mysqld.err

2-6、创建相关的目录、初始化数据库、启动数据库、临时密码登陆、修改新密码

mkdir /data3307  mkdir /data3308  mkdir /data3309
 
mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/data3309 --initialize---初始化数据库

ls /data3309----会出现一部分文件:
[root@host50 ~]# ls /data3309/
auto.cnf        ibdata1      ib_logfile1  performance_schema
ib_buffer_pool  ib_logfile0  mysql        sys

mysqld_multi start 3----启动服务
ls /data3309--又会多出来一些文件:
[root@host50 ~]# ls /data3309
auto.cnf        ib_logfile0  mysql       mysql.sock          sys
ib_buffer_pool  ib_logfile1  mysqld.err  mysql.sock.lock
ibdata1         ibtmp1       mysqld.pid  performance_schema

ss -utnlp | grep 3309----检查服务是否确实已经启动

mysqld_multi --user=root --password="123456" stop 3-----停止服务

ss -utnlp | grep 3309----检查服务是否确实已经停止

mysql -uroot -p'Jl>!lL%2piN5' -S /data3309/mysql.sock---初次使用临时密码登陆


alter user user() identified by "123456"----改密码------user()是一个变量,等同于root@localhost

quit

mysql -uroot -p123456 -S /data3309/mysql.sock---新密码登

3、mysql性能调优:

                                                                                                                                                                                       
软调优:优化
硬调优:优化相关硬件
 

3-1、cpu方面的:

[root@host51 ~]# top
 
top - 10:35:47 up  1:18,  1 user,  load average: 0.00, 0.01, 0.05
Tasks: 114 total,   1 running, 113 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni, 99.3 id,  0.0 wa,  0.0 hi,  0.3 si,  0.3 st
KiB Mem :  1016260 total,   440544 free,   301600 used,   274116 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.   548708 avail Mem  
 
  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND       
 2093 root      20   0  157696   2176   1524 R  0.3  0.2   0:00.01 top           
    1 root      20   0  125384   3976   2508 S  0.0  0.4   0:01.02 systemd       
    2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd      
    3 root      20   0       0      0      0 S  0.0  0.0   0:00.09 ksoftirqd/0   
    5 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H
 
[root@host51 ~]# uptime
 10:30:25 up  1:12,  1 user,  load average: 0.00(一分钟的平均负载), 0.01(五分钟的平均负载), 0.05(15分钟的平均负载)
 

3-2、内存方面的:

[root@host51 ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:            992         294         430           7         267         536
Swap:          2047           0        2047
 

3-3、存储设备:磁盘转速不低于15000/s,最好是固态盘,查看I/O
 

数据库服务软件版本太低,导致性能低下。

3-4、查看数据库服务运行时的运行参数(查看变量)


show variables;
show variables like "";


3-5、影响数据库服务性能的值:


show variables like "%conn%";
并发连接数量: max_connections                               | 151----可手动设置
show global status like "%conn%";
 

3-6、连接超时时间:


客户端与服务器建立连接时,
 
show variables like "%time%";
connect_timeout          | 10  -----建立连接时,3次握手的超时时间,超过连接时间后,强制断开连接请求
wait_timeout             | 28800-----连接建立后,服务器等待客户输入sql命令的超时时间
 

3-7、可以重复使用的线程数量:

show variables like "%thread%";
thread_cache_size        | 9  ----不论有没有客户端来连接,都始终开9个线程来以备快速建立连接。不能设置太大,太大的话会浪费系统资源,太小会降低客户端连接速度
 

3-8、可以打开的表的数量的限制

show variables like "%table%";
table_open_cache         | 2000----可以打开的表的数量的限制
 

3-9、缓存的设置:

mysql服务体系结构:
管理工具:软件安装后提供的管理命令-----比如mysql  mysqldump mysqlbinlog  mysqladmin
连接池:检查服务器是否有资源响应客户端的连接请求
SQL接口:把sql命令传递给mysql程序
分析器:检查用户执行的sql命令是否正确
优化器:对执行的sql命令做优化  
查询缓存:存储曾经查找到的查询结果(存储空间是mysql服务启动时从主机的物理内存里划分出来的)
存储引擎:表的处理器,不同的存储引擎支持不同的功能和数据存储方式,mysql innodb
文件系统:数据服务用来存储数据的硬盘。
 
mysql服务处理查询请求的过程:
 
查询缓存:
 
show variables like "%cache%";
show variables like "query_cache_%";
query_cache_wlock_invalidate | OFF----查询缓存写锁有效---当客户端查询myisam存储引擎的表时,若此时有客户端对表执行写操作的话,数据库服务不好从查询缓存里查找结果返回给客户端,而是等写操作完成后,重新从表里查询结果返还给客户端。
query_cache_min_res_unit     | 4096----查询缓存的最小存储单元4k,存储单元太小不会浪费存储空间,但会浪费系统资源。
 
query_cache_type             | OFF-----0(off)--不开启查询缓存功能,---1----若查询结果没有超出查询缓存数据大小的限制,则会继续将查询结果放入查询缓存中,超过限制则不再存储---2---明确指定将查询结果放到查询缓存中,并且没有缓存数据大小的限制。
 

3-10、查看查询缓存统计信息:

show global status like "qcache%"
Qcache_hits             | 0 ---- 当查询结果是在查询缓存里找到的,此变量值自动加一
Qcache_inserts        | 0 -----在查询缓存里查找一次数据,不管能不能找到,此变量值自动加一  
Qcache_hits/Qcache_inserts----在查询缓存中查到数据的命中率。
 
索引缓存:
show variables like "%key%";
key_buffer_size          | 8388608----存放索引缓存的空间大小,这里设置的为8MB
explain select * from 表名;-----可以列出查找过程信息,可以看到查询时是否使用索引
 
show variables like "%buffer%";
read_buffer_size         | 131072-----为顺序读取表记录保留的缓存大小,增大此值可以提高读取速度
sort_buffer_size         | 262144 -----增大此值可以提高order和group的速度

 
3-11、程序员编写的sql查询命令太复杂,导致数据库服务器处理慢。

mysql服务日志的类型有四种:
错误日志---
binlog日志---记录所有的写操作的sql命令

慢查询日志---
查询日志----记录执行的所有sql命令,默认没有启用。
vim /etc/my.cnf
[mysqld]
general-log
wq:
systemctl restart mysqld----就开启了查询日志
慢查询日志---记录超过了超时时间才显示查询结果的sql命令,默认没有启用,默认超时时间是10s。---记录此类执行起来太慢的sql命令,进行调优
vim /etc/my.cnf
[mysqld]
slow-query-log
wq:
systemctl restart mysqld----就开启了慢查询日志
select sleep(11),user from mysql.user limit 2;----在查询每一行之前睡11秒

感谢您的拜读!!!,喜欢请点赞!

猜你喜欢

转载自blog.csdn.net/Perfect11_1/article/details/81152235