MySQL 5.7主要特性
- 更好的性能
对于多核CPU、固态硬盘、锁有着更好的优化,每秒100W QPS已不再是MySQL的追求,下个版本能否上200W QPS才是用户更关心的。 - 更好的InnoDB存储引擎
- 更为健壮的复制功能
复制带来了数据完全不丢失的方案,传统金融客户也可以选择使用。MySQL数据库。此外,GTID在线平滑升级也变得可能。 - 更好的优化器
- 优化器代码重构的意义将在这个版本及以后的版本中带来巨大的改进,Oracle官方正在解决MySQL之前最大的难题。
- 原生JSON类型的支持
- 更好的地理信息服务支持
InnoDB原生支持地理位置类型,支持GeoJSON,GeoHash特性 - 新增sys库
以后这会是DBA访问最频繁的库MySQL 5.7已经作为数据库可选项添加到《OneinStack》
安装前的装备
安装依赖包
yum -y install gcc gcc-c++ ncurses ncurses-devel cmake bison bison-devel
下载源码包
建议到官方网站下载http://dev.mysql.com/downloads/mysql/,选择“Source Code”。下载的过程,需要注册一个Oracle账户,如果有直接登录就好
提供一个下载地址:http://101.96.10.47/dev.mysql.com/get/Downloads/MySQL-5.7/mysql-boost-5.7.14.tar.gz
新版本的源码增加了boost库,如果你下的源码里面没有需要下载这个库,否则会报错
cd /usr/local/src
wget http://101.96.10.47/dev.mysql.com/get/Downloads/MySQL-5.7/mysql-boost-5.7.14.tar.gz
tar -zvxf mysql-boost-5.7.14.tar.gz
cd mysql-5.7.14
新建MySQL用户和用户组
groupadd -r mysql
useradd -r -g mysql mysql
新建MySQL数据库数据文件目录
mkdir -p /home/mysql/data
mkdir -p /home/mysql/logs
mkdir -p /home/mysql/temp
备注:真实的生产环境一般来说会独立放在根目录下,方便磁盘挂载上去
预编译
cmake
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/home/mysql/data \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DWITH_BOOST=./bootst/boost_1_59_0 \
-DSYSCONFDIR=/etc \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DENABLE_DTRACE=0 \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DWITH_EMBEDDED_SERVER=1
备注:使用cmake源码安装MySQL,如果你打算安装到不同的路径,注意修改上面语句汇总的“/usr/local/mysql”和“/home/mysql/data”
配置解释:
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql //设置安装目录
-DMYSQL_DATADIR=/home/mysql/data //设置数据库存放目录
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock //设置UNIX socket目录
-DDEFAULT_CHARSET=utf8mb4 //设置默认字符集
-DDEFAULT_COLLATION=utf8mb4_general_ci //设置默认校对规则
-DWITH_INNOBASE_STORAGE_ENGINE=1 //添加InnoDB引擎支持
-DSYSCONFDIR=/etc //设置my.cnf配置文件的所在目录,默认为安装目录
编译安装
make
#编译安装的过程比较久,编译安装完成执行make install
make install
#安装完成后清理一下零时文件
make clean
设置启动脚本,开机自启动
#拷贝可执行文件到指定的目录下,并修改名字为mysqld
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
#授予可执行的权限
chmod +x /etc/init.d/mysqld
#设置为开机启动
systemctl enable mysqld
修改mysql的可执行目录
chown -Rf mysql:mysql /usr/local/mysql
chown -Rf mysql:mysql /home/mysql
配置文件
#参考,具体里面的参数说明,请自行晚上搜索
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
skip-external-locking
skip-name-resolve
user = mysql
port = 3306
basedir = /usr/local/mysql
datadir = /home/mysql/data
tmpdir = /home/mysql/temp
# server_id = .....
socket = /usr/local/mysql/mysql.sock
log-error = /home/mysql/logs/mysql_error.log
pid-file = /home/mysql/data/mysql.pid
open_files_limit = 10240
back_log = 600
max_connections=500
max_connect_errors = 6000
wait_timeout=605800
#open_tables = 600
#table_cache = 650
#opened_tables = 630
max_allowed_packet = 32M
sort_buffer_size = 4M
join_buffer_size = 4M
thread_cache_size = 300
query_cache_type = 1
query_cache_size = 256M
query_cache_limit = 2M
query_cache_min_res_unit = 16k
tmp_table_size = 256M
max_heap_table_size = 256M
key_buffer_size = 256M
read_buffer_size = 1M
read_rnd_buffer_size = 16M
bulk_insert_buffer_size = 64M
lower_case_table_names=1
default-storage-engine = INNODB
innodb_buffer_pool_size = 1G
innodb_log_buffer_size = 32M
innodb_log_file_size = 128M
innodb_flush_method = O_DIRECT
#####################
long_query_time= 2
slow-query-log = on
slow-query-log-file = /home/mysql/logs/mysql-slow.log
[mysqldump]
quick
max_allowed_packet = 32M
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
添加环境变量
vi /etc/profile
#末尾添加以下内容
#mysql env
export PATH=$PATH:/usr/local/mysql/bin:/usr/local/mysql/lib
source /etc/profile
初始化数据库
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/home/mysql/data
备注:
- MySQL之前版本mysql_install_db是在mysql_basedir/script下
- MySQL 5.7直接放在了mysql_install_db/bin目录下。
- "–initialize"已废弃,生成一个随机密码(~/.mysql_secret)
- "–initialize-insecure"不会生成密码
- "–datadir"目录下不能有数据文件
我用上面的语句执行后,好像没起啥作用,然后把-datadir里面的数据全部删除,用以前的脚本执行了一次,然后成功
mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/home/mysql/data
启动数据库
[root@db-01 ~]# systemctl start mysqld
[root@db-01 ~]# systemctl status mysqld
?.mysqld.service - LSB: start and stop MySQL
Loaded: loaded (/etc/rc.d/init.d/mysqld)
Active: active (running) since Sat 2016-08-27 18:02:31 CST; 9s ago
Docs: man:systemd-sysv-generator(8)
Process: 13086 ExecStop=/etc/rc.d/init.d/mysqld stop (code=exited, status=0/SUCCESS)
Process: 13211 ExecStart=/etc/rc.d/init.d/mysqld start (code=exited, status=0/SUCCESS)
CGroup: /system.slice/mysqld.service
?..13228 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/home/mysql/data --pid-file=/home/mysql/data/mysql.pid
?..13878 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/home/mysql/data --plugin-dir=/usr/local/mysql/...
Aug 27 18:02:29 db-01 systemd[1]: Starting LSB: start and stop MySQL...
Aug 27 18:02:31 db-01 mysqld[13211]: Starting MySQL.. SUCCESS!
Aug 27 18:02:31 db-01 systemd[1]: Started LSB: start and stop MySQL.
查看mysql服务进程和端口
[root@db-01 ~]# ps -ef | grep mysql
root 13228 1 0 18:02 ? 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/home/mysql/data --pid-file=/home/mysql/data/mysql.pid
mysql 13878 13228 0 18:02 ? 00:00:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/home/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/log/mysqld.log --open-files-limit=10240 --pid-file=/home/mysql/data/mysql.pid --socket=/usr/local/mysql/mysql.sock --port=3306
root 14266 14187 0 18:05 pts/0 00:00:00 grep --color=auto mysql
设置数据库root用户密码
MySQL和Oracle数据库一样,数据库也默认自带了一个 root 用户(这个和当前Linux主机上的root用户是完全不搭边的),我们在设置好MySQL数据库的安全配置后初始化root用户的密码。配制过程中,一路输入 y 就行了。这里只说明下MySQL5.7.14版本中,用户密码策略分成低级 LOW 、中等 MEDIUM 和超强 STRONG 三种,推荐使用中等 MEDIUM 级别!
mysql_secure_installation
在这里设置的root用户明码,可以通过命令登陆,但是不能执行任何操作,需要重置密码
mysql -u root -p
#首次进入,无法进行任何操作,会报错,运行mysqladmin重置密码
mysqladmin -u root
[root@db-01 ~]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.14-log Source distribution
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| edu_demo |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
这样MySQL 5.7.14就完成了安装,如果想要重新安装,只需要进入 /usr/local/src/mysql-5.7.14目录,重新执行make install 就好。