linux系统下的MySQL 安装及性能测试


1. MySQL安装

-- 下载目录
cd /.
mkdir study
cd study

-- 下载MySQL7的版本
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
-- 下载MySQL8的版本
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.16-linux-glibc2.12-x86_64.tar.xz

-- 解压
tar -zvxf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz

-- /usr/local 目录下创建文件夹存
mkdir /usr/local/msyql
-- 移动
mv mysql-5.7.26-linux-glibc2.12-x86_64/* /usr/lcoal/mysql

-- 添加mysql组和mysql 用户:
-- 添加mysql组:
groupadd mysql

-- 添加mysql用户:
useradd -r -g mysql mysql

-- 配置MySQL
cd /usr/local/mysql

-- 主:从5.7.18开始不在二进制包中提供my-default.cnf文件
-- 进入MySQL的bin目录
-- 查看MySQL对于配置文件的查找路径,越左优先查找
/bin/mysql --help | grep 'Default options' -A 1

-- 创建配置文件
touch /usr/local/mysql/etc/my.cnf

添加内容

[client]
port=3307
[mysql]
default-character-set=utf8
socket=/var/lib/mysql/mysql.sock
[mysqld]
skip-grant-tables
port=3307
socket=/var/lib/mysql/mysql.sock
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
max_connections=200
character-set-server=utf8
default-storage-engine=INNODB
max_allowed_packet=16M
-- 设置开机启动
-- 复制启动脚本到资源目录
cp ./support-files/mysql.server /etc/rc.d/init.d/mysql
-- 增加 mysqld 服务控制脚本执行权限
chmod +x /etc/rc.d/init.d/mysql
-- 将 mysqld 服务加入到系统服务
chkconfig --add mysql
-- 检查mysqld服务是否已经生效
chkconfig --list mysql

-- 启动MySQL
service mysql start

-- 环境变量配置
vim /etc/profile

添加如下内容 大概在52行左右

PATH = $PATH:/usr/local/mysql/bin
export

-- 刷新 source /etc/profile -- 检测 echo $PATH -- 修改登入密码 mysql mysql> usr mysql; mysql> update user set authentication_string=PASSWORD('你的密码') where User='root'; mysql> alter user 'root'@'localhost' identified by 'root'; mysql> flush privileges; mysql> quit; -- 修改/usr/local/mysql/etc/my.cnf 文件 -- 注释skip-grant-tables -- 重启MySQL service mysql restart -- 测试 mysql -u root -p -- 配置远程访问 -- 防火墙端口设置,便于远程访问 firewall-cmd --zone=public --add-port=3306/tcp --permanent firewall-cmd --reload -- 查看端口 firewall-cmd --list-ports 启动防火墙服务:systemctl ummask firewalld 启动防火墙:systemctl start firewalld -- 进入MySQL mysql> grant all privileges on *.* to root@'%' identified by "password"; mysql> flush privileges; -- 如果没有效果可以尝试重启一下MySql

2.影响mysql性能的要素点

  1. 系统(靠钱)CPU内存

  2. I/O,mysql进程状态,mysql服务器周期变化 => mysql版本 以及 电脑处理

  3. 业务
    数据库设计 => 六大范式 (三大范式) => join

    在性能角度来说:不是范式越高越好 适量选择与冗余一些字段

    项目中sql语句编写以及索引建立

    业务分析 不当 项目预期设计 性能

    论坛文章统计 => 实时更新文章总数量

    select count(*) from 论坛文章; 100w

    大量 2000w 查询时间 12s

    物化视图

    分析->业务

    100w/2

    需求变更 => 功能

    业务代码

mysql优化->思路

数据库-数据表的设计结构->sql语句优化->数据库参数配置(事务日志)->源头(源码角度 c++)(扩展)->硬件(充值)

性能优化:俗气 抠门 ; 合理利用可用的资源

3. 怎么去思考性能问题(鱼骨图 – 思考问题方法)

4. linux 常见的分析系统性能方法工具

ps,top,vmstat,sar,free命令 => 了解 参数

5. mysql性能测试

show status

show processlist

show variables

mysqlslap是mysql自带的基准测试工具,优点:查询数据,语法简单,灵活容易使用.该工具可以模拟多个客户端同时并发的向服务器发出查询更新,给出了性能测试数据而且提供了多种引擎的性能比较.msqlslap为mysql性能优化前后提供了直观的验证依据,建议系统运维和DBA人员应该掌握一些常见的压力测试工具,才能准确的掌握线上数据库支撑的用户流量上限及其抗压性等问题。

mysqlslap -h 127.0.0.1 -u root -p -c 100 -i 1 –create-schema tipaskx -q “select count(*) from ask_users” -e innodb –number-of-queries=5000

6. 第三方测试的工具

ab官网 httpd.apache.org/docs/2.0/programs/…

ab命令对发出负载的计算机要求很低,既不会占用很多CPU,也不会占用太多的内存,但却会给目标服务器造成巨大的负载,因此是某些DDOS攻击之必备良药,老少皆宜。自己使用也须谨慎。否则一次上太多的负载,造成目标服务器直接因内存耗光死机,而不得不硬重启,得不偿失。

JMeter是一个java应用程序,可以加载其他应用并测试其性能。它虽然是设计用来测试Web应用的,但也可以用于测试其他诸如FTP服务器,或者通过JDBC进行数据库查询测试。

JMeter比ab要复杂的多。例如他可以通过控制预热时间等参数更加灵活地模拟真实用户的访问。JMeter拥有绘图接口,还可以对测试进行记录,然后离线重演测试结果。

注意需要下载java的jdbc jar包