(DB2.2)MySQL读写分离、性能调优

一、MySQL 数据读写分离:库乎端访问数据的查询请求和写请求分别给不同的数据服务器处理

查询 select A数据库服务器 slave
写 insert update delete B数据库服务器 master

读写分离的原理
  • 多台MySQL 服务器
    -分别提供读、写服务,均衡流量
    -通过主从复制保持数据一致性
  • 由MySQL 代理面向客户端
    -收到SQL写请求时,交给服务器A处理
    -收到SQL读请求时,交给服务器B处理
    -具体区分策略由服务设置
为什么要数据读写分离?
 减轻单台数据库服务器的并发访压力
 提高机器硬件的利用率
如何实现数据读写分离

1、通过程序实现(让程序员写代码实现)
2、通过安装软件提供的服务实现(中间件)
Mycat mysql-proxy Maxscale …

配置数据读写分离

client
中间件
mysql-server
配置步骤:

1、部署mysql一主一从同步结构
1.1 配置主服务器51(启用binlog 日志 用户授权 查看binlog日志信息)
[root@51 ~]# vim /etc/my.cnf
[mysqld]
server_id=51
log-bin=master51
[root@51 ~]# systemctl restart mysqld
[root@51 ~]# mysql -uroot -p123456
mysql> grant replication slave on *.* to repluser@"%" identified by "123qqq...A";
mysql> show master status;
1.2 配置从服务器52(指定server_id 指定主服务器信息 启动slave 查看程序信息)
[root@52 ~]# vim /etc/my.cnf
[mysqld]
server_id=52
[root@52 ~]# systemctl restart mysqld
[root@52 ~]# mysql -uroot -p"Taren1.com"
mysql> change master to master_host="192.168.4.51",master_user="repluser",master_password="123qqq...A",master_log_file="master51.000005",master_log_pos=441;
mysql> start slave;
mysql> show slave status\G;
2、配置数据读写分离服务器57
2.1 拷贝软件包 到 57 主机

[root@room9pc01 ~]# scp ‘/root/桌面/aaaaa/数据库管理/软件包/soft/mysql/maxscale-2.1.2-1.rhel.7.x86_64.rpm’ [email protected]:/root

2.2 安装软件

[root@57 ~]# yum -y install maxscale-2.1.2-1.rhel.7.x86_64.rpm

2.3修改配置文件
[root@57 ~]# vim /etc/maxscale.cnf
   9 [maxscale]
 10 threads=1    //定义线程个数
 18 [server1]    //定义数据库服务器主机名
 19 type=server
 20 address=192.168.4.51  //master主机ip地址
 21 port=3306
 22 protocol=MySQLBackend
 23 
 24 [server2]     //定义数据库服务器
 25 type=server
 26 address=192.168.4.52      //slave主机ip地址
 27 port=3306
 28 protocol=MySQLBackend 

 35 [MySQL Monitor]   //定义要监视的数据库节点
 36 type=monitor
 37 module=mysqlmon
 38 servers=server1,server2  //主从数据库的主机名
 39 user=scalemon  //用户名
 40 passwd=123qqq...A    //密码
 41 monitor_interval=10000

 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]   //路由用户(定义读写分离的数据库节点)
 64 type=service
 65 router=readwritesplit
 66 servers=server1,server2    //主、从数据库的主机名
 67 user=scaleroute      //用户名
 68 passwd=123qqq...A    //密码
 69 max_slave_connections=100%

 85 #[Read-Only Listener]
 86 #type=listener
 87 #service=Read-Only Service
 88 #protocol=MySQLClient
 89 #port=4008

 97 [MaxAdmin Listener]    //定义管理服务的端口号
 98 type=listener
 99 service=MaxAdmin Service
100 protocol=maxscaled
101 socket=default
102 port=4016
2.4 用户授权(根据配置文件的设置在2台数据库服务器上添加对应的用户)

监控用户

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

路由用户

mysql> grant select on mysql.* to scaleroute@"%" identified by "123qqq...A";
2.5 启动服务(192.168.4.57)

2.51 验证授权用户

[root@57 ~]# mysql -h192.168.4.51 -uscalemon -p123qqq...A
[root@57 ~]# mysql -h192.168.4.51 -uscaleroute -p123qqq...A

2.52 启动服务

[root@57 ~]# maxscale -f /etc/maxscale.cnf     启动服务
[root@57 ~]# ps -C maxscale
[root@57 ~]# ss -ntulp | grep maxscale
[root@57 ~]# killall -9 maxscale       //关闭服务
3测试配置
3.1 查看管理信息
[root@57 ~]# maxadmin -uadmin -pmariadb -P4016
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
-------------------+-----------------+-------+-------------+--------------------
3.2 测试数据分离读写(客户端连接192.168.4.57访问数据)

3.2.1 在主数据库服务器上添加访问数据的用户

[root@51 ~]# mysql -uroot -p123456
mysql> create database db8;
mysql> create table db8.t1(id int);
mysql> grant select,insert on db8.* to yaya@"%" identified by "123qqq...A";

3.2.2 客户端50,连接57主机访问数据

[root@51 ~]# mysql -uroot -p123456
mysql> insert into db8.t1 values(11111);
[root@52 ~]# mysql -uroot -p"Taren1.com"
mysql> insert into db8.t1 values(222222);
[root@50 ~]# mysql -h192.168.4.57 -P4006 -uyaya -p123qqq...A
mysql> select * from db8.t1;
mysql> insert into db8.t1 values(11111);
mysql> select * from db8.t1;

二、MySQL实例

1、什么是多实例?在一台服务器上运行多个数据库服务
2、为什么要使用多实例?节约运维成本,提高硬件使用率
3、 配置多实例
3.1 安装软件

[root@50 ~]# mv mysql-5.7.20-linux-glibc2.12-x86_64 /usr/local/mysql
[root@50 ~]# cd /usr/local/mysql/
[root@50 mysql]# ls bin

3.2 修改服务的主配置文件

[root@50 mysql]# systemctl stop mysqld
[root@50 mysql]# systemctl disable mysqld
Removed symlink /etc/systemd/system/multi-user.target.wants/mysqld.service.
[root@50 mysql]# mv /etc/my.cnf /root/
[root@50 mysql]# vim /etc/my.cnf

[mysqld_multi]   //启用多实例
mysqld = /usr/local/mysql/bin/mysqld_safe   //指定进程文件路径
mysqladmin = /usr/local/mysql/bin/mysqladmin   //指定管理命令路径
user = root    //指定进程用户

[mysqld1]   /实例进程名称
datadir = /dir1   //数据库目录
port = 3307    //端口号
log_error = /dir/mysql3307.log   //错误日志文件
pid-file = /dir1/mysql3307.pid  //进程 pid 文件位置
socket = /dir1/mysql3307.sock   //指定sock文件的路径和名称

[mysqld2]
datadir = /dir2   
port = 3308 
log_error = /dir/mysql3308.log 
pid-file = /dir2/mysql3308.pid 
socket = /dir2/mysql3308.sock 
[root@50 ~]# mkdir /dir1
[root@50 ~]# mkdir /dir2

数据库目录
端口号
错误日志文件
pid 号文件
socket
3.3 启动服务
[root@50 mysql]# /usr/local/mysql/bin/mysqld_multi start 1
[root@50 mysql]# /usr/local/mysql/bin/mysql -uroot -p’f:zfya1q5kBB’ -S /dir1/mysql3307.sock
mysql> alter user root@“localhost” identified by “123456”;
[root@50 mysql]# /usr/local/mysql/bin/mysqld_multi --user=root --password=123456 stop 1
[root@50 mysql]# /usr/local/mysql/bin/mysqld_multi start 2
[root@50 mysql]# /usr/local/mysql/bin/mysql -uroot -p’ok)I*1ft&H8<’ -S /dir2/mysql3308.sock
mysql> alter user root@“localhost” identified by “123456”;
[root@50 mysql]# /usr/local/mysql/bin/mysqld_multi --user=root --password=123456 stop 2
4、 验证配置
4.1 访问多实例服务,对数据作操作

三、MySQL性能调优

1 升级硬件 (cpu、内存、存储) 运维部
2 优化数据库服务运行参数

mysql> show variables;  //显示当前所有变量
mysql> show variables like "%关键字%";
mysql> show variables like "%timeout%";
mysql> set globel 变量名=值;
mysql> set globel connect_timeout=5;
[root@50 ] vim /etc/my.cof
[mysqld]
	  	 变量名=值
mysql> show status;
mysql> show status like "%connect%";
mysql> show status like "Connections";
常用设置参数:
max_connections	 允许的最大并发连接数
mysql>  show status like "Max_used_connections";
最大并发连接/最大并发连接数 = 0.85 x  100% = 85%
并发及连接控制
Max_used_connections/max_connections=0.85
connect_timeout	 等待连接超时,默认10秒,仅登录时有效
wait_timeout 等待关闭连接的不活动超时秒数,默认28800妙(8小时)
缓存参数控制
key_buffer_size  用于MyISAM引擎的关键索引缓存大小
sort_buffer_size   为每个要排序的线程分配此大小的缓存空间
read_buffer_size   为顺序读取表记录保留的缓存大小
thread_cache_size   允许保存在缓存中被重用的线程数量
table_open_cache   为所有线程缓存的打开的表的数量

3 让程序员优化访问数据的sql命令
优化服务查询缓存
数据服务处理查询请求的过程?
查看与缓存相关的变量
show variables like “query_cache%”;

4 网络带宽
5 优化服务架构(检查网络架构中是否有数据传输瓶颈)

猜你喜欢

转载自blog.csdn.net/weixin_45048541/article/details/90200491
今日推荐