DBA02 一、实现MySQL读写分离 二、配置MySQL多实例 三、MySQL性能优化
一、实现MySQL读写分离
什么是数据读写分离?
–把查询请求和写请求分别给不同的数据库服务器处理。
为什么要配置数据读写分离?
读写分离适用与读远大于写的场景,如果只有一台服务器,当select很多时,update和delete会被这些select访问中的数据堵塞,等待select结束,并发性能不高。 对于写和读比例相近的应用,应该部署双主相互复制。
读写分离的好处:
1.增加冗余
2.增加了机器的处理能力
3.对于读操作为主的应用,使用读写分离是最好的场景,因为可以确保写的服务器压力更小,而读又可以接受点时间上的延迟。
如何配置?
方法一、人肉分离(由程序员写程序实现)
没有配置分离服务器
查询就去主库 select ----------> 主库
写、更新、删除就去从库 insert update delete ----->从库
方法二、部署数据库读写分离服务器
mysql 分离服务器(中间件):基于数据库客户端和主、从服务端的软件
如:maxscale、mycat、mysql-proxy
一、配置步骤
1、配置主从同步结构
主库:
启用binlog日志、用户授权、查看日志信息
从库:
指定server_id、指定主库信息
2、部署数据库读写分离服务器(中间件即分离服务器56操作)
**a、**装包maxscale
**b、**修改配置文件
vim /etc/maxscale.cnf 9 [maxscale] //定义服务运行时线程的数量 10 threads=auto //自动创建 18 [server1] //定义数据库服务器 19 type=server 20 address=192.168.4.51 //ip地址 21 port=3306 //端口 22 protocol=MySQLBackend 23 [server2] //定义服务运行时线程的数量 24 type=server 25 address=192.168.4.52 26 port=3306 27 protocol=MySQLBackend 34 [MySQL Monitor] //定义监控的数据库服务器 35 type=monitor 36 module=mysqlmon 37 servers=server1,server2 //主、从数据库的主机名 38 user=maxmon //监控连接数据库服务器的用户 39 passwd=123456@qq.Com 40 monitor_interval=10000 注释51~60行 51 ##[Read-Only Service] //不定义只读服务器 52 #type=service 53 #router=readconnroute 54 #servers=server1 55 #user=myuser 56 #passwd=mypwd 57 #router_options=slave 58 # 59 # ReadWriteSplit documentation: 60 # https://github.com/mariadb-corporation/MaxScale/blob/2.1/Documentation/Routers/ReadWriteSplit.md [Read-Write Service] //定义读写分离的数据节点 63 type=service 64 router=readwritesplit 65 servers=server1,server2 //主、从数据库的主机名 66 user=monscale //连接数据库服务器的监控用户, 67 passwd=123456@qq.Com //密码 68 max_slave_connections=100% 74 [MaxAdmin Service] //定义管理服务 75 type=service 76 router=cli 注释84~88 84 #[Read-Only Listener] //不定义只读服务使用的端口 85 #type=listener 86 #service=Read-Only Service 87 #protocol=MySQLClient 88 #port=4008 90 [Read-Write Listener] //定义读写分离服务使用的端口 91 type=listener 92 service=Read-Write Service //读写分离服务的名称 93 protocol=MySQLClient 94 port=4006 96 [MaxAdmin Listener] //定义管理服务使用的端口 97 type=listener 98 service=MaxAdmin Service 99 protocol=maxscaled 100 socket=default 101 port=4016
**c、**根据配置文件的配置做对应的设置
server1
server2
maxmon 123456@qq.Com
monscale 123456@qq.Com
授权要与配置文件改的内容一致(在主库授权)
mysql> grant replication slave,replication client on * . * to maxmon@"%" identified by "123456@qq.Com"; //创建监控用户 mysql> grant select on mysql.* to monscale@"%" identified by "123456@qq.Com"; //创建路由用户 mysql> select user,host from mysql.user in("maxmon","monscale");
在中间件服务验证
]# yum -y install mariadb mysql -h192.168.4.51 -u maxmon -p123456@qq.Com mysql -h192.168.4.51 -u monscale -p123456@qq.Com mysql -h192.168.4.52 -u maxmon -p123456@qq.Com mysql -h192.168.4.52 -u monscale -p123456@qq.Com
**d、**启动服务(maxscale)(在中间件操作)
maxscale -f /etc/maxscale.cnf
停止服务
pkill -9 maxscale
若使用systemctl restat maxscale 启动服务会使pkill杀不死进程,无法正常停止服务。
注意:若服务没起来就是配置文件错误
]# ss -nuplt | grep maxscale //查看服务是否启动 tcp LISTEN 0 128 :::4016 :::* users:(("maxscale",pid=3552,fd=12)) tcp LISTEN 0 128 :::4006 :::* users:(("maxscale",pid=3552,fd=11)) ]# maxadmin -P4016 -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 -------------------+-----------------+-------+-------------+--------------------
在主库授权访问数据的用户
mysql> create database bbsdb; mysql> create table bbsdb.a(id int); mysql> grant select,insert on bbsdb.* to student@"%" identified by "123456@qq.Com"; //创建访问数据用户 在从库查看 mysql> desc bbsdb.a;
3、在客户端主机,测试读写分离的配置
在客户端连接数据读写分离服务器(中间件)
]# mysql -h192.168.4.56 -P4006 -u student -p123456@qq.Com mysql> select nysql> insert
主库添加的数据其他从库可以看到
从库添加的数据主库查不到其他从库、客户端可以
在维护数据读写分离要注意什么?
给中间件即(分离服务器)、主库、从库做备用机。
二、配置MySQL多实例
需要的软件包:
mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz
什么是多实例?
–在一台物理主机上运行多个数据库服务
为什么要使用多实例?
—节约运维成本
—提高硬件利用率
环境准备:
1)停止主机rpm包的mysqld数据库服务(可以在新机操作)
]#systemctl restart stop mysqld ]# mv /etc/my.cnf /root/
安装支持多实例服务的软件包
装源码包
]# tar -xf 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-files2)修改主配置文件
配置文件参数说明
]# vim /etc/my.cnf [mysqld_multi] mysqld = /usr/mysql/bin/mysqld_safe mysqladmin = /usr/mysql/bin/mysqladmin user = root [mysqld1] //实例进程名称 datadir=/dir1 //数据库目录 port=3307 //端口号 socket=/dir1/mysql1.sock //socket文件 log-error=/dir1/mysql1.log //错误日志 pid-file=/dir1/mysql1.pid //进程PID号文件 [mysqld2] datadir=/dir2 port=3308 socket=/dir2/mysql2.sock log-error=/dir2/mysql2.log pid-file=/dir2/mysql2.pid根据修改的主配置文件创建目录
]# mkdir /dir1 ]# mkdir /dir23)初始化授权库(可省略这一步)
4)启动服务
启动服务的时候会自动初始化授权库]# /usr/local/mysql/bin/mysql_multi start 1 //启动mysql1 2019-01-14T08:36:48.330315Z 1 [Note] A temporary password is generated for root@localhost: MijjajtUW6%6 //密码 ]# ss -unlpt |grep 3307 ]# ls /dir15)客户端测试
]# /usr/local/mysql/bin/mysql -u root -p'MijjajtUW6%6' -S /dir1/mysql1.sock //初始密码登陆 mysql> alter user user() identified by '123456'; //修改本机密码 ]#/usr/local/mysql/bin/mysql -u root -p123456 -S /dir1/mysql1.sock //修改密码后登陆 mysql> create database fan; mysql> create table fan.a(id int); #创建数据库、表后目录会有对应的文件 ]# ls /dir1/fan/ a.frm a.ibd db.optmysql2同上
停止服务:
/usr/local/mysql/bin/mysqld_multi --user=root --password=123456 stop 1 //停止mysql1服务另外测试
在配置多实例机子上添加授权用户使客户端可以访问
多实例:]# /usr/local/mysql/bin/mysql -u root -p123456 -S /dir2/mysql2.sock mysql> grant all on * . * fan@"%" identified by "123456"; mysql> select user,host from mysql.user;客户端
]# mysql -h192.168.4.50 -P3308 -u fan -p123456三、MySQL性能优化
1)MySQL体系结构
2)MySQL执行流程
3)MySQL性能调优
- 提高MySQL系统的性能、响应速度
—替换有问题的硬件(CPU、磁盘、内存等)
—服务程序的运行参数调整
—对SQL查进行优化
4)并发及连接控制
图一、
图二、
5)缓冲参数控制
图一、
图二、
图三、
图四、
图五、
图六、
二、SQL查询优化
1)MySQL日志类型
2)优化SQL查询
- 调整服务配置
]# vim /etc/my.cnf [mysqld] .......... slow_query_log=1 slow_query_log_file=mysql-slow.log slow_query_time=5 log_queries_not_using_indexes=1 //启用慢查询日志,为1秒 ]# service mysql restart
- 查看慢查询日志
----使用mysqldumpslow 工具
]# mysqldumpslow /var/lib/mysql/mysql-slow.log
三、查询的缓存
图一、
图二、
四、调优思路总结
- 简单实现MySQL服务器的优化配置方法
- mysql性能优化-慢查询分析、优化索引和配置
- MySQL性能优化之参数配置(来自网络)
- mysql性能优化配置
- mysql性能优化-慢查询分析、优化索引和配置
- mysql+spring+mybatis实现数据库读写分离[代码配置]
- mysql性能优化-慢查询分析、优化索引和配置
- MySQL配置文件mysql.ini参数详解、MySQL性能优化
- mysql性能优化-慢查询分析、优化索引和配置
- MySQL性能优化之Open_Table配置参数的合理配置建议
- mysql性能优化-慢查询分析、优化索引和配置
- MySQL实现批量插入以优化性能的教程
- mysql性能优化-慢查询分析、优化索引和配置
- 配置MySQL实现Zabbix代理服务器的性能调优
- mysql my.cnf 配置性能优化
- MySQL配置文件my.cnf中文详解附mysql性能优化方法分享
- MySQL配置文件my.cnf中文详解附mysql性能优化方法分享
- [转]mysql性能优化-慢查询分析、优化索引和配置
- MySQL DBA教程:Mysql性能优化之缓存参数优化
- MySQL性能优化之max_connections配置参数浅析