mysql1.7(mysql优化,mysql-mmm软件介绍,mysql高可用集群。)
一,mysql优化。
1. 1mysql服务工作过程
mysql服务由8个功能组件组成:
1,管理工具 把软件包安装后,提供的命令。
#mv /etc/my.cnf /etc/my.cnf.bak //要先把配置文件改名才去执行下面命令
#mysql_install_db --datadir=/var/lib/mysql --user=mysql
以这种方式初始重新安装数据库,后密码随即生成。如果要登陆
先把配置文件名称改回来,设置跳过密码验证。去改密码登陆。
2,连接池:检查服务器是否有空闲线程和系统资源分配给线程使用,
处理当前客户端的连接请求。
3,sql接口:把客户连接后执行的sql命令传递给mysql进程处理
4,分析器:检查sql命令是否有语法错误和检查是否有对应的SQL操作权限
排查错误命令:perror 编号 会弹出对应编号的错误信息。
5,优化器:自动优化执行的SQL命令,以节省系统资源的方式去执行。//mysql自带的一个程序
6,查询缓存:用来存储曾经查找过的sql结果。查询缓存的空间是从系统的物理内存划分出来的。
7,存储引擎(innodb/myisam):数据库服务软件自带程序,不同存储有不同的功能和数据存储方式。
8,文件系统:(存储介质/硬盘)
1.2mysql服务处理查询请求的工作过程。
接收到查询请求后,先查找查询缓存,若缓存里有查找的数据,直接从查询缓存提取数据,
返回给客户端.反之从表里查找数据给客户端
(从表里找到数据后,先保存到查询缓存里在返回给客户端)
当数据库服务器处理客户端的请求慢的时候,可能是由于什么原因造成的?
1.3如何优化mysql数据库服?
1,网络带宽窄 使用网络测速软件 测试网络流量
2,服务器硬件的配置低 :查看服务硬件资源的使用情况 cpu 物理内存
动态查看:top load average:0.03,0.09,0.13 数值越小越稳定
free sar 命令的使用。
3,提供数据库服务软件的版本低 查看服务运行时运行参数
show variables;
show global variables;
show global variables like "%query%";
临时修改变量 mysql-> set [global] 变量名=值;
永久设置:vim /etc/my.cnf
[mysqld]
变量名=值。
常用的变量有哪些?
并发连接数量
mysql> show variables like "%max_connections%";
mysql> set global max_connections=200; 更改全局变量
mysql>show global status like "%Max_used_connections%";
如何合理设置公式:
曾经有过的最大数量/最大并发连接数=0.85
Max_used_connections/max_connections=0.85
连接超时时间
建立连接时三次握手的超时时间 默认是10S
建立连接等待执行新的sql命令的超时时间
mysql>show variables like "%timeout%";
建立连接等待执行新的sql命令的超时时间wait_timeout=28800
所有程序打开表的数量table_open_cache=2000
可以重复使用的线程的数量:thread_cache_size=9
加快查询速度的相关参数设置:read_buffer_size
sort_buffer_size
key_buffer_size 添加索引空间
read_md_buffer_size 给排序查询或分组查询分配缓存空间.
与查询缓存空间相关的参数:
mysql->show variables like "query_cache%";
查询缓存空间的统计信息:
mysql->show global status like "qcache%";
程序访问数据库执行的sql查询命令太复杂导致处理速度慢。
在数据库服务器上启用慢查询日志,记录超过指定时间(默认10s)显示查询结果的SQL命令。
启用慢查询日志
查看日志内容
统计日志的记录信息
Mysql数据库日志类型:
错误日志 binlog日志 慢查询日志 查询日志
log-error=/var/log/mysql.log
启用慢查询日志:vim /etc/my.cnf
[mysqld]
slow-query-log //添加 此行启动慢查询日志
默认路径在:/var/log/mysql/mysql51-slow.log
统计日志的记录信息
#mysqldumpslow /var/lib/mysql/主机名-slow.log > /tmp/sql.txt
查询日志: 记录在数据库上执行的所有sql查询命令日志
vim /etc/my.cnf
[mysqld]
general-log //添加行
/var/lib/mysql/mysql51-slow.log //查询日志路径
数据存储网络架构有数据传输的瓶颈
二,部署mysql高可用集群
(mysql-mmm软件 和 mysql主从同步结构)
结构: 主53 主54(开启级联复制功能)
|
———————————
51从 52从
主从配置思路:1.1,配置主从同步结构
1.2,配置主主结构
1.3配置一主多从结构
1.4验证以上配置
mysql-mmm软件配置:
1,装包
2,修改文件
3,启动服务
4,测试配置
+++++++++++++++++++++++++++++++++++++++++++++++++++
一,主从同步配置结构:
主主结构配置:
1,vim /etc/my.cnf
[mysqld]
server_id=53
log-bin=/binlogdir/master53
binlog_format="mixed"
2,systemctl restart mysqld
3,授权用户:grant replication slave on *.* to slaveuser@'%' identified by "123456";
4,然后change master to ...定义配置。;start slave.
5,主机54上也对应操作,参数对应进行更改。且开启级联复制功能。
一主多从配置:
配置主机51~52
1,vim /etc/my.cnf
server_id=51 //52
2,重起服务 systemctl restart mysqld
3,注意防火墙和selinux要关闭
4,mysql->change master to master_host=''....指向主库配置
以上操作同时在两台同时配置。
测试:在主机53添加访问数据的授权用户,使用增改删会同步到51,52,54三台主机。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
mysql-mmm软件安装配置:
(1)装包 (在所有主机上51~55安装 perl-* gcc gcc-c++ )
获取资源包:mysql-mmm.zip
把zip包拷到51~55主机对应目录下进行解包:unzip mysql-mmm.zip
在对应目录下写个脚本:
#! /bin/bash
unzip mysql-mmm.zip
cd mysql-mmm/
tar xf mysql-mmm-2.2.1.tar.gz &>/dev/null
cd mysql-mmm-2.2.1/
make install &>/dev/null
ls /etc/mysql-mmm/
(2)1,修改所有数据库服务器51-54主机上的配置文件mmm_agent.conf
vim mmm_agent.conf
include mmm_common.conf
this my51(自定义名称)
2,修改管理主机55上的配置文件mmm_mon.conf
1 include mmm_common.conf
2
3 <monitor>
4 ip 192.168.4.55 //定义本机ip
5 pid_path /var/run/mmm_mond.pid
6 bin_path /usr/lib/mysql-mmm/
7 status_path /var/lib/misc/mmm_mond.status
8 ping_ips 192.168.4.51, 192.168.4.52, 192.168.4.53, 192.168.4.54 //定义监控的4台主机ip
9 </monitor>
10
11 <host default>
12 monitor_user monitor //监控用户
13 monitor_password 123456 //监控用户的密码
14 </host>
15
16 debug 0 //是否显示启动过程0/1
3,51-55修改公共配置文件mmm_common.conf
vim /etc/mysql-mmm/mmm_common.conf
4 <host default> //本地主机配置
5 cluster_interface eth0
6
7 pid_path /var/run/mmm_agentd.pid
8 bin_path /usr/lib/mysql-mmm/
9
10 replication_user hcy //定义主服务器的授权用户密码
11 replication_password 123456
12
13 agent_user agent //定义启动进程用户//密码
14 agent_password 123456
15 </host>
17 <host my53>
18 ip 192.168.4.53 //定义主库配置
19 mode master
20 peer my54
21 </host>
22
23 <host my54>
24 ip 192.168.4.54
25 mode master
26 peer my53
27 </host>
28
29 <host my51>
30 ip 192.168.4.51
31 mode slave
32 </host> //定义从库配置
33
34 <host my52> //额外添加4行
35 ip 192.168.4.52
36 mode slave
37 </host>
39 <role writer>
40 hosts my53, my54 //定义主库名字
41 ips 192.168.4.250 //定义虚拟ip地址
42 mode exclusive
43 </role>
45 <role reader> //定义浮动从库ip地址。
46 hosts my51, my52
47 ips 192.168.4.251, 192.168.4.252
48 mode balanced
49 </role>
:wq
scp mmm_common.conf 把编辑好的文件拷贝覆盖掉另外4台 /etc/mysql-mmm/目标文件
然后在53的主机实行用户授权:
mysql->grant replication client on *.* to monitor@'%' identified by '123456';
grant replication client,process,super on *.* to agent@'%' identified by '123456';
(3)启动服务
1,安装服务启动时依赖的软件(51~55)
依赖包:Proc-Daemon-0.03.tar.gz, Algorithm-Diff-1.1902.tar.gz
perl-Log-Log4perl-1.26-1.el6.rf.noarch.rpm
编写一个脚本:
#! /bin/bash
tar xf Algorithm-Diff-1.1902.tar.gz
cd Algorithm-Diff-1.1902/
perl Makefile.PL
make && make install
cd ..
tar xf Proc-Daemon-0.03.tar.gz
cd Proc-Daemon-0.03/
perl Makefile.PL
make && make install
cd ..
rpm -ivh perl-Log-Log4perl-1.26-1.el6.rf.noarch.rpm
在所有数据库主机(51~54)安装获取vip地址程序
#! /bin/bash
gunzip Net-ARP-1.0.8.tgz
tar xf Net-ARP-1.0.8.tar
cd Net-ARP-1.0.8/
perl Makefile.PL
make && make install
2,启动数据库服务器上的mmm_agentd服务(51~54)
/etc/init.d/mysql-mmm-agent start 启动服务
/etc/init.d/mysql-mmm-agent status 查看状态
netstat -antpu | grep :9989 查看端口
服务日志文件:/var/log/mysql-mmm/mmm_agentd.log
3,启动管理主机上的mmm_monitor服务
/etc/init.d/mysql-mmm-monitor start //启动管理主机服务
netstat -antpu | grep :9988 //管理端口
/var/log/mysql-mmm/mmm_mond.log //日志文件
配置好后55主机上提供命令:mmm_agentd mmm_backup ...等等命令
输入:mmm_control show 显示所有主机状态
默认配好后全部都是:AWAITING_RECOVERY等待恢复状态
需要管理员手动去恢复为在线状态:获取vip地址。
mmm_control set_online 主机名 恢复在线状态
mmm_control set_offline 主机名 关闭在线状态
在数据库服务器上查看是否获取到vip地址
ip addr show | grep 192.168.4
测试配置:mysql -h192.168.4.250 -u用户名 -p密码
mysql -> select @@hostname; 查看所在数据库主机
stop 掉一台主数据库,再次连接还是可以正常执行.
排错思路:可以查看日志:/var/log/mysql-mmm/
依赖是否有装全,配置文件写错。
什么是集群?
使用一组主机提供相同的服务
什么是高可用集群?
始终保证有一台服务可提供给客户端访问
mysql-mmm软件介绍?
配置mysql高可用集群