《MySQL王者晋级之路》张甦,电子工业出版社,2018.3
基于MySQL5.6和MySQL5.7
MySQL简介与主流分支版本
MySQL简介
MySQL AB -> Sun -> Oracle
MySQL主流分支版本
MySQL、Percona Server、MariaDB
官方版本的MySQL
MySQL 5.5 5.6 5.7 8.0
MySQL 8.0对源代码进行了重构,对MySQL Optimizer优化器进行了改进,支持隐藏索引
Percona Server
在InnoDB存储引擎的基础上,提升性能和易管理性,最后形成增强版的XtraDB引擎,可以更好地发挥硬件性能。
XtraDB-Cluster支持多点写入强同步高可用集群,实现实时同步,解决MySQL主从复制延迟问题
TokuDB存储引擎,支持数据压缩、高扩展性和优秀的查询插入性能
MariaDB
由开源社区维护,高度兼容
包含XtraDB存储引擎、TokuDB存储引擎、Spider水平分片存储引擎,支持基于表的并行复制、多源复制、Galera Cluster集群
MySQL数据库的安装、启动和关闭
下载MySQL二进制软件包
官网MySQL有四个版本:GA版、DMR版、RC版、Beta版。一般生产和测试环境使用GA版(常规可用的版本,经过bug修复测试)
wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz
wget https://cdn.mysql.com//Downloads/MySQL-5.6/mysql-5.6.40-linux-glibc2.12-x86_64.tar.gz
安装前系统环境检测
1、SELinux和系统防火墙iptables需要关闭
2、I/O调度系统默认是cfq模式,强烈建议使用deadline模式
cat /sys/block/sda/queue/scheduler
#cfq完全公平队列;noop电梯式调度;deadline截止时间调度
3、swap分区的设置
不分配swap或分配4GB的swap
swappiness控制如何使用swap分区,0表示最大限度使用物理内存,然后才使用swap,可能导致内存溢出,导致MySQL被意外kill掉;100,积极使用swap,把内存数据及时搬到swap,不建议
cat /proc/sys/vm/swappiness
编辑 /etc/sysctl.conf 加入vm.swappiess的值
4、文件系统的选择 [xfs]
5、操作系统限制
ulinit -a
open files和max user processes,建议均设置为65535
vim /etc/security/limits.conf
* soft nproc 65535
* hard nproc 65535
* soft nofile 65535
* hard nofile 65535
6、numa需要关闭
numa --interleave=all /usr/local/mysql/bin/mysqld_safe -defaults-file=/etc/my.cnf &
关闭numa,可以更好地分配内存,不需要采用swap的方式来获取内存
可以在BIOS、操作系统或者在数据库启动过程中关闭
yum install numactl
numastat -H 、lscpu
MySQL 5.6版本的安装过程
#第一部曲
1、创建MySQL用户,指定用户组
groupadd mysql
useradd -g mysql mysql -s /sbin/nologin
2、软件包放到/usr/local目录
cd /usr/local
tar zxf mysql-5.6.40-linux-glibc2.12-x86_64.tar.gz
3、做个链接,方便以后升级
ln -s mysql-5.6.40-linux-glibc2.12-x86_64/ mysql
4、给MySQL目录授权
chown -R mysql:mysql mysql-5.6.40-linux-glibc2.12-x86_64/
#第二部曲
1、创建数据目录
mkdir -p /data/mysql
2、授权
chown mysql:mysql -R /data/mysql/
#第三部曲
配置数据库配置文件
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
cat/etc/my.cnf
[client]
port=3306
socket=/tmp/mysql.sock
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
port=3306
socket=/tmp/mysql.sock
basedir=/usr/local/mysql
datadir=/data/mysql
open_files_limit=65535
back_log=103
max_connections=512
max_connect_errors=100000
table_open_cache=512
external-locking=FALSE
max_allowed_packet=128M
sort_buffer_size=2M
join_buffer_size=2M
thread_cache_size=51
query_cache_size=32M
tmp_table_size=96M
max_heap_table_size=96M
slow_query_log=1
slow_query_log_file=/data/mysql/slow.log
log-error=/data/mysql/error.log
long_query_time=0.5
server-id=1323306
log-bin=/data/mysql/mysql-bin
sync_binlog=1
binlog_cache_size=4M
max_binlog_cache_size=128M
max_binlog_size=1024M
expire_logs_days=7
key_buffer_size=32M
read_buffer_size=1M
read_rnd_buffer_size=16M
bulk_insert_buffer_size=64M
character-set-server=utf8
default-storage-engine=InnoDB
binlog_format=row
#gtid_mode = on
#log_slave_updates