文档章节

MySQL安装

anyeshe
 anyeshe
发布于 2017/04/27 15:24
字数 2497
阅读 51
收藏 0

MySQL介绍

知数堂最靠谱mysql

mysql的特点

  • 不要当做oracle,sql server,postgre sql使用

  • 不适合的场景

    • 不适合存储图片,文本等大对象
    • 复杂查询,复杂运算,或全文检索
  • 好的应用场景

    • 小事务快速提交
    • 数据持久化存储
    • 高并发事务控制
  • cpu从低版本到高版本不断做cpu多核支持

    • 5.1 多核很差 最多用4核心
    • 5.5 最多24核心
    • 5.6 最多64核心
    • 5.7 多核利用已经不是问题
    • 每个query对应一个线程,只能用到一个逻辑core
    • 每个连接对应一个线程,只能用到一个逻辑core
  • 内存简单有效,也有些不足

    • innodb_buffer_pool_sie,key_buffer,query_cache
    • sort buffer,join buffer, tmp table
    • 官方版本中并发内存锁竞争比较严重,Mariadb, Percona做了优化

    ==建议==

    • 高并发下加大物理内存,提供IO 提供TPS
    • 关闭querycache
    • 专业单实例机器的innodb_buffer_pool_size设置为物理内存的50%-70%,多实例设置为总数据量的20%左右
    • kv对象先存到redis,memcache中再持久化到mysql
  • I/O data file, binlog, redo log,undo log

    • undologI/O特征,顺序写,随机读
    • redolog,binlog,relaylog 顺序写,顺序读
    • 数据文件 顺序写,顺序读
    • myisam是堆组织表(HOT)innodb是索引组织表(IOT)
    • innodb相比myisam消耗更多磁盘空间,但可以更好的支持并发事务

    ==建议==

    • 加大内存
    • 使用更高速的IO设备
  • 其他

    • 单进程多线程
    • 无连接池
    • 无sql解析cache

mysql的优点

  • lamp,lnmp热门组合
  • 开源免费个性化定制
  • 快速开发迭代
  • 社区支持
  • 跨平台
  • 特别适合互联网应用
  • 权限控制灵活
  • 灵活多数据类型支持,没有太多强制限制,可以实现内置自动转化,且可以通过sql_mode和其他数据库系统兼容
  • 灵活sql用法
  • mysql复制特性实现快速扩容
  • 部署简单
  • 主流语言api支持
  • 内存分配灵活

mysql的不足

  • 5.6之前无CBO特征,5.6有一定CBO特征,5.7可调整cost rule
  • 每个连接,每个query只能使用到一个逻辑cpu
  • 连接数增加性能下降,但是可以使用thread pool
  • online DDL比较弱(可以使用pt-osc补充)
  • 官方版本全局锁比较多,可使用多实例或者percona分支版本
  • 没有hash join, 少用复杂join或者无索引join
  • 子查询弱,少用或者改写成join
  • 优化器比较弱 多用简单sql

mysql适用场景

  • 在线OLTP
  • 高并发,高tps
  • 业务模型简单
  • 保障数据可靠性,一致性,以及持久化

安装

1.下载mysql安装包

地址:http://dev.mysql.com

选择 download -> community(社区) -> MySQL Community Server -> generally available(GA)版本

选择平台:linux generic。选择cpu架构:x86_64。

吴老师的命令提示符

zst_ps1()
{
    Date=$(date +%F)
    Time=$(date +%H:%M:%S)
 
    PS1="\\n\[\e[1;37m[\e[m\]\[\e[1;32m\u\e[m\]\[\e[1;33m@\e[m\]\[\e[1;35m\h $Time \e[m\]\e[1;36m`pwd`\e[m\e[1;37m]\e[m\n\\$"
}
 
PROMPT_COMMAND=zst_ps1

2.系统配置

  • 文件系统
推荐使用 xfs 或者 ext4 
  • iptables 放开3306 或者数据库在内网直接关闭
iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
/etc/rc.d/init.d/iptables save
/etc/rc.d/init.d/iptables status
  • 关闭selinux或者设置策略
当前会话关闭
setenforce 0

永久关闭
vim /etc/selinux/config
SELINUX=disabled
  • 最大打开文件数修改为65535
查看最大打开文件数
ulimit -a 
open files                      (-n) 65535

零时修改
ulimit -n 65535 

永久修改-看这个文件里的注释很详细
vim /etc/security/limits.conf

*               soft    nofile           65535
*               hard    nofile           65535
  • max user process 修改 一个用户最多运行的进程数
vim /etc/security/limits.conf

@mysql          hard    nproc            65535
@mysql          soft    nproc            65535
  • 修改 IO 调度器设置io 调度器修改为 deadline,如果是 SSD 或者 PCIe-SSD 设备,则修改为 noop
查看核实下 io 调度器的配置,
cat /sys/block/sda/queue/scheduler
noop anticipatory deadline [cfq]
这时表示 io 调度器采用的是 cfq,而非我们要求的 deadline,需要及时调整。

下列两种方式修改:
a) 在线动态修改,重启失效
echo deadline > /sys/block/sdb/queue/scheduler
这里的 sdb 修改为实际的设备名称,例如 sda,或者 sdc。

b) 修改 /etc/grub.conf,永久生效修改 /etc/grub.conf 配置文件,在 kernel 那行增加elevator一个配置
例如: kernel /vmlinuz-2.6.18-308.el5 ro root=LABEL=/1
elevator=deadline rhgb quiet
  • 修改 swappiness
swappiness 是 Linux 的一个内核参数,用来控制 Linux 物理 RAM 内存进行 SWAP页交换的相对权重,
尽量减少系统的页缓存被从内存中清除的情况。 

设置 vm.swappiness = 0并且将该设置写入 /etc/sysctl.conf ,重启后也能生效。sysctl -p

取值范围是 0~100,vm.swappiness 的值越低,Linux 内核会尽量不进行 SWAP 交换页的操作,vm.swappiness 的值越高,linux 会越多的使用 SWAP 空 间。

Linux 系统的默认值是 60,当系统需要内存时,有 60%的概率使用 SWAP。对于大多数桌面系统,设置为 100 可以提高系统的整体性能;对于数 据库应用服务器,设置为 0,可以提高物理内存的使用率,进而提高数据库服务的响应性能。

不过需要注意的是,RHEL 7 以上版本,如果 vm.swappiness = 0,有可能会由于 OOM 问题,导致 mysqld 进程被 OOM-Killer 进程杀掉
  • 关闭 NUMA 特性 (bios中和操作系统中都设置), C-states, C1E
新一代架构的 NUMA 不适用于跑数据库的场景。它本意是为了提高内存利用率,但实际效果不好,反而可能导致一个 CPU 的内存尚有剩余,但另一个不够用,发生 SWAP 的问题,

因此建议直接关闭或者修改 NUMA 的调度机制。
a) 修改 /etc/grub.conf,关闭 NUMA,重启后生效
修改 /etc/grub.conf 配置文件,在 kernel 那行增加一个配置后重启生效,例如: kernel /vmlinuz-2.6.18-308.el5 ro root=LABEL=/1 elevator=deadline numa=off rhgb quiet

b) 修改 /etc/init.d/mysql 或者 mysqld_safe 脚本,设定启动 mysqld 进程时的 NUMA 调度机制,例如: 
numactl --interleave=all 
/usr/bin/mysqld_safe --datadir="$datadir" --socket="$socketfile" \
--log-error="$errlogfile" --pid-file="$mypidfile" --user=mysql >/dev/null 2>&1 &

别忘记 innodb_flush_method=O_DIRECT

https://access.redhat.com/solutions/23216

  • 内存分配库(可选)
内存优化这块可以考虑使用jemalloc( tokudb,percona都有使用这个方式,官方版本需要自已加载)
  • 关闭cpu节能模式 (bios中设置)
检查
/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
确认这里显示是不是ondemand,是则启用了节能模式。

另外检查/proc/cpuinfo并对比cpu MHZ的数字和”model name”后面显示的数字是否一样
  • 阵列卡策略适用force-wb,关闭预读
阵列卡的cache相对于内存来说小很多一般2G-4G左右,所以这些空间用于缓存写比较实用,缓存读关闭转移到内存(innodb_buffer_pool)

如果硬盘是ssd的话那么直接读盘不一定比从cache读快
  • 机械盘做raid10
  • SSD做raid1或者raid5
  • vm.dirty_ratio <= 5
脏数据比例达到5%停下所有任务刷脏数据-硬性
  • vm.dirty_background_ratio <= 10
脏数据比例达到10%开始刷脏数据-软性

安装

  • 新建/opt/mysql目录,并把包放入,解压。
  • 创建软连接
cd /usr/local/
ln -s /opt/mysql/mysql-5.6.23-linux-glibc2.5-x86_64 mysql
  • 添加环境变量
echo "export PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
source /etc/profile
  • 添加用户和组
groupadd mysql
useradd -M -g mysql -s /sbin/nologin -d /usr/local/mysql mysql
  • 基于配置文件定的环境,创建基本的目录 basedir,datadir,backupdir,binlogdir最好自己指定
mkdir -p /data/mysql/mysql3306
cd /data/mysql/mysql3306/
mkdir data
mkdir logs
mkdir tmp
chown -R mysql:mysql /data/mysql/mysql3306
创建/etc/my.cnf 配置文件

/data
`-- mysql
    `-- mysql3306
        |-- data
        |-- logs
        `-- tmp

==/data最好单独挂一个独立存储==

  • 创建配置文件 /etc/my.cnf

  • 初始化mysql

// 5.7
 mysqld --defaults-file=/data/mysql/mysql3308/my_3308.cnf --initialize 
 
 --initialize 这个选项一定要在最后放着,要不会报datadir不为空

// 5.6
/scripts/mysql_install_db

5.7初始化完成后会有一个密码,在我们配置文件中指定的错误日志中找到password后面密码就是

初始化完后要先看errlog里有没有err级别错误

==5.7初始化有2种方式==

[root@localhost ~]# mysqld --help --verbose |grep init
 --initialize        Create the default database and exit. Create a super user
  --initialize-insecure 
                      our server id. Default value is 0 (to break infinite
                      
// 第一种是安全的 也就是会生成密码 必须改密码才可以后续操作
// 第二种不安全 启动起来连上去什么都能干
  • 创建启动脚本 并 启动服务
 安装包里support-file目录中
 cp mysql.server /etc/init.d/mysql
 
 /etc/init.d/mysql start|stop|restart
  • 进入mysql更改密码
初始化完后error.log中有密码。

mysql -S /home/mysql/mysql.sock -p

// 进去之后什么也干不了,只能改密码
"(unknown)@localhost Thu Mar 16 23:53:04 2017 23:53:04 [(none)]>alter user user() identified by '123456';

// 命令提示符变了
"root@localhost Thu Mar 16 23:55:53 2017 23:55:53 [(none)]>

==sock文件在my.cnf中查找 密码就是初始化时候生成的密码==

至此安装完成

补充

开发环境常用设置

开发环境:
开启log_queries_not_using_indexes  // 记录没使用索引的sql

开启慢查询

分析slow log

授权和生产环境一致

关闭query cache

设置小的innodb_buffer_pool_size, key_buffer_size

mysql.user 表示一个myisam表

也就是所我们可以把别的地方的表文件直接复制过来(同版本)就可以使用,这是个安全漏洞,可以绕过权限验证

安装完加固

5.6之前

  • 删除所有非root,非localhost的账号
delete from mysql.user where user != 'root' or host != 'localhost';
flush privileges;
  • 重设密码
alter user user() identified '123456'
  • 删除test库
drop database test;
truncate mysql.db;

5.7不用了

查看进程是否正常

我们通过 ==端口==, ==进程== 查看一个程序是否运行正常。

centos7.0后废弃了netstat 因为它有很多bug, 取代的是ss

[root@localhost ~]# ss -ntpl |grep 3306
0      0                             :::3306                         :::*      users:(("mysqld",11612,33))

© 著作权归作者所有

上一篇: mysql多实例
下一篇: mysql日志
anyeshe
粉丝 1
博文 19
码字总数 20555
作品 0
海淀
程序员
私信 提问

暂无文章

OSChina 周一乱弹 —— 人生,还真是到处是意外

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @这次装个文艺青年吧 :#今日歌曲推荐# 分享lil peep的单曲《High School》 《High School》- lil peep 手机党少年们想听歌,请使劲儿戳(这里...

小小编辑
12分钟前
1
0
Spring使用ThreadPoolTaskExecutor自定义线程池及实现异步调用

多线程一直是工作或面试过程中的高频知识点,今天给大家分享一下使用 ThreadPoolTaskExecutor 来自定义线程池和实现异步调用多线程。 一、ThreadPoolTaskExecutor 本文采用 Executors 的工厂...

CREATE_17
今天
6
0
CSS盒子模型

CSS盒子模型 组成: content --> padding --> border --> margin 像现实生活中的快递: 物品 --> 填充物 --> 包装盒 --> 盒子与盒子之间的间距 content :width、height组成的 内容区域 padd......

studywin
今天
7
0
修复Win10下开始菜单、设置等系统软件无法打开的问题

因为各种各样的原因导致系统文件丢失、损坏、被修改,而造成win10的开始菜单、设置等系统软件无法打开的情况,可以尝试如下方法解决 此方法只在部分情况下有效,但值得一试 用Windows键+R打开...

locbytes
昨天
8
0
jquery 添加和删除节点

本文转载于:专业的前端网站➺jquery 添加和删除节点 // 增加一个三和一节点function addPanel() { // var newPanel = $('.my-panel').clone(true) var newPanel = $(".triple-panel-con......

前端老手
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部