admin管理员组文章数量:1651802
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安装包
选择 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
内存分配库(可选)
内存优化这块可以考虑使用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/myf 配置文件
/data
`-- mysql
`-- mysql3306
|-- data
|-- logs
`-- tmp
==/data最好单独挂一个独立存储==
创建配置文件 /etc/myf
初始化mysql
// 5.7
mysqld --defaults-file=/data/mysql/mysql3308/my_3308f --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文件在myf中查找 密码就是初始化时候生成的密码==
至此安装完成
补充
开发环境常用设置
开发环境:
开启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安装create an_MySQL安装 - anyeshe的个人页面 - OSCHINA - 中文开源技术交流社区 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1729567547a1206662.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论