Mysql 5.7 特性,相比5.5和5.6版本

安全性

用户表 mysql.user 的 plugin字段不允许为空, 默认值是 mysql_native_password,而不是 mysql_old_password,不再支持旧密码格式;

增加密码过期机制,过期后需要修改密码,否则可能会被禁用,或者进入沙箱模式;

提供了更为简单SSL安全访问配置,并且默认连接就采用SSL的加密方式。

灵活性

MySQL数据库从5.7.8版本开始,也提供了对JSON的支持。

可以混合存储结构化数据和非结构化数据,同时拥有关系型数据库和非关系型数据库的优点

能够提供完整的事务支持
generated column是MySQL 5.7引入的新特性,所谓generated column,就是数据库中这一列由其他列计算而得

易用性

在MySQL 5.7 之前,如果用户输入了错误的SQL语句,按下 ctrl+c ,虽然能够”结束”SQL语句的运行,但是,也会退出当前会话,MySQL 5.7对这一违反直觉的地方进行了改进,不再退出会话。

MySQL 5.7可以explain一个正在运行的SQL,这对于DBA分析运行时间较长的语句将会非常有用。

sys schema是MySQL 5.7.7中引入的一个系统库,包含了一系列视图、函数和存储过程, 该项目专注于MySQL的易用性。

例如:如何查看数据库中的冗余索引;如何获取未使用的索引;如何查看使用全表扫描的SQL语句。

可用性

在线设置 复制的过滤规则 不再需要重启MySQL,只需要停止SQLthread,修改完成以后,启动SQLthread。

在线修改buffer pool的大小。

Online DDL MySQL 5.7支持重命名索引和修改varchar的大小,这两项操作在之前的版本中,都需要重建索引或表。

在线开启GTID ,在之前的版本中,由于不支持在线开启GTID,用户如果希望将低版本的数据库升级到支持GTID的数据库版本,需要先关闭数据库,再以GTID模式启动,所以导致升级起来特别麻烦。

性能

临时表的性能改进。

临时表只在当前会话中可见

临时表的生命周期是当前连接(MySQL宕机或重启,则当前连接结束)

只读事务性能改进。

MySQL 5.7通过 避免为只读事务分配事务ID ,不为只读事务分配回滚段,减少锁竞争等多种方式,优化了只读事务的开销,提高了数据库的整体性能。

加速连接处理。

在MySQL 5.7之前,变量的初始化操作(THD、VIO)都是在连接接收线程里面完成的,现在将这些工作下发给工作线程,以减少连接接收线程的工作量,提高连接的处理速度。这个优化对那些频繁建立短连接的应用,将会非常有用。

复制性能的改进 (支持多线程复制(Multi-Threaded Slaves, 简称MTS)

MySQL的默认配置是库级别的并行复制,为了充分发挥MySQL 5.7的并行复制的功能,我们需要将slave-parallel-type配置成LOGICAL_CLOCK。

默认启用 STRICT_TRANS_TABLES 模式。

对 ONLY_FULL_GROUP_BY 模式实现了更复杂的特性支持,并且也被默认启用。

其他被默认启用的sql mode还有 NO_ENGINE_SUBSTITUTION。

默认参数的改变

默认binlog格式调整为ROW格式

默认binlog错误后的操作调整为ABORT_SERVER

在先前的选项下(binlog_error_action=IGNORE_ERROR),如果一个错误发生,导致无法写入binlog,mysql-server会在错误日志中记录错误并强制关闭binlog功能。这会使mysql-server在不记录binlog的模式下继续运行,导致从库无法继续获取到主库的binlog。

默认开启mysql崩溃时的binlog安全。

默认调低slave_net_timeout。

安装不同

mysql_install_db已经不再推荐使用了,建议改成mysqld --initialize 完成实例初始化。如果 datadir 指向的目标目录下已经有数据文件,则会有[ERROR] Aborting;

在初始化时如果加上 --initial-insecure,则会创建空密码的 root@localhost 账号,否则会创建带密码的 root@localhost 账号,密码直接写在 log-error 日志文件中;新用户登入后需要立刻修改密码,否则无法继续后续的工作。

Mysql 5.7 修改 root密码

/etc/init.d/mysqld stop

vim /etc/my.cnf    添加:  skip-grant-tables

/etc/init.d/mysqld start 
mysql -u root -p          #直接回车,空密码

use mysql;
update mysql.user set authentication_string=password('!@#www.666.com') where user='root';

alter user 'root'@'%' identified by '!@#www.666.com';

grant all privileges on *.* to 'root'@'%' identified by '!@#www.666.com';
flush privileges;     #刷新数据库

将 /etc/my.cnf 刚添加的skip-grant-tables注释掉,然后重启数据库:
/etc/init.d/mysql restart

登录数据库: mysql -u root -p'!@#www.666.com'

Mysql 5.7 shell安装脚本

#/bin/bash
echo "Mysql 5.7.26 Shell script , Made my xiao.hai"

useradd -M -s /sbin/nologin mysql
yum -y install make gcc-c++ cmake bison-devel ncurses-devel libaio libaio-devel perl-Data-Dumper gcc gcc-c++ net-tools

mkdir -p /usr/local/mysql
mkdir -p /usr/local/mysql/data
mkdir -p /usr/local/mysql/log
mkdir -p /usr/local/mysql/data/bin-log
chown -R mysql:mysql /usr/local/mysql

mkdir -p /usr/local/boost && cd /usr/local/boost
wget http://www.sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz
tar -xvzf boost_1_59_0.tar.gz

cd software
tar zxf mysql-5.7.26.tar.gz
cd mysql-5.7.26

cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DSYSCONFDIR=/etc \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_BOOST=/usr/local/boost \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci

make && make install

ln -s /usr/local/mysql/bin/* /usr/bin/
cat >> /etc/my.cnf <<EOF
[client]
port =3306
socket =/usr/local/mysql/mysql.sock
[mysqld]
skip-name-resolve
explicit_defaults_for_timestamp=true
pid-file=/usr/local/mysql/data/Mysql.pid
port =3306
socket =/usr/local/mysql/mysql.sock
connect_timeout =60
wait_timeout =2880
max_connections =2048
max_allowed_packet =64M
max_connect_errors =1000
tmp_table_size =512M
max_heap_table_size =256M
query_cache_size =128M
tmp_table_size =256M
max_heap_table_size =256M
join_buffer_size =256k
read_buffer_size =256k
read_rnd_buffer_size =256k
log_error =/usr/local/mysql/log/mysql-error.log
slow_query_log_file =/usr/local/mysql/log/mysql-slow.log
slow_query_log =1
long_query_time =2
expire_logs_days =7
log-bin=/usr/local/mysql/data/bin-log
binlog_format=mixed
server-id =1
innodb_data_home_dir =/usr/local/mysql/data/
innodb_file_per_table =1
innodb_status_file =1
innodb_buffer_pool_size =4G
innodb_flush_method =O_DIRECT
innodb_flush_log_at_trx_commit =2
innodb_support_xa =0
innodb_log_file_size =536870912
innodb_log_buffer_size =128M
event_scheduler =1
query_cache_type =0
[mysqldump]
quick
max_allowed_packet = 32M
[mysqlhotcopy]
interactive-timeout
EOF

/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
chmod +x /etc/init.d/mysql
chkconfig --add mysql
chkconfig --level 35 mysql on

至此安装完成,有疑问可联系:  1050784459