在CentOS上通过yum升级MySQL到5.7

因为之前已经通过yum安装了mysql5.6,所以在安装之前要先做好数据备份,同时要清除掉之前的源配置,不然会报冲突。

yum erase mysql-community-release 
yum remove mysql-server 
cd /usr/local 
wget "http://repo.mysql.com//mysql57-community-release-el6-7.noarch.rpm" 
rpm -ivh mysql57-community-release-el6-7.noarch.rpm 
yum install mysql-server

安装好后,程序会自动的将以前的/etc/my.cnf备份成/etc/my.cnf.rpmsave,可以将my.cnf.rpmsave的配置修改到/etc/my.cnf,让数据文件重新指向原来的数据库文件夹即可。

相比MySQL5.6,配置上有一些不同了,这里随便贴一个我现在使用的,里面有些配置是兼容以前的有些重复了,还有关于innodb的配置我暂时没有优化,后面看情况再改

[mysqld]
datadir=/var/lib/mysql
#event_scheduler=ON
#pid-file=/data/mysql/mysqld.pid 
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
lower_case_table_names=1
#port=3306

#external-locking=FALSE
back_log=1024
#skip-locking
key_buffer=16K
max_allowed_packet=3M
thread_stack=512K
thread_cache_size=8
thread_cache=3
query_cache_limit=2M
query_cache_size=128M
query_cache_min_res_unit=2
character-set-server=utf8
max_connections=2000
max_connect_errors=1024
open_files_limit=4096
key_buffer=2048M
net_buffer_length=32K
max_allowed_packet=10240000
table_open_cache=1024
sort_buffer_size=1M
read_buffer_size=1M
join_buffer_size=1M
read_rnd_buffer_size=4M
myisam_sort_buffer_size=128M
thread_cache_size=16
thread_concurrency=8
tmp_table_size=256M
bulk_insert_buffer_size=4M
skip-name-resolve
skip-external-locking
external-locking=FALSE

slow_query_log
long_query_time=1

#innodb_data_home_dir = /data/mysql
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = /data/mysql
#innodb_file_per_table = 1
#innodb_buffer_pool_size = 512M
#innodb_additional_mem_pool_size=64M
innodb_buffer_pool_size=512M
innodb_additional_mem_pool_size=64M
innodb_log_file_size=256M
innodb_log_buffer_size=64M
innodb_lock_wait_timeout=50
innodb_flush_log_at_trx_commit=0
innodb_flush_method='O_DIRECT'
innodb_read_io_threads=8
innodb_write_io_threads=8
innodb_thread_concurrency=8
innodb_log_files_in_group=3
innodb_max_dirty_pages_pct=90

[mysqldump]
quick
max_allowd_packet=16M

[mysql]
no-auto-rehash
default-character-set=utf8

[myisamchk]
key_buffer=128M
sort_buffer_size=128M
read_buffer=2M
write_buffer=2M

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

注意:大约 table_cache * 2 + max_connections=max_open_files(open_files_limit)

关于MySQL5.7的优化配置可以参考姜老师的MySQL最优配置文件,实际参数要根据自己的机器参数修改

配置好后直接重启MySQL,发现数据又都回来了。

意外的发现fail2ban对MySQL的防暴力登录失效了(测试环境方便程序开发MySQL端口暴露在外网),后来发现MySQL7的日志格式和之前的不一样,只好直接修改了/etc/fail2ban/filter.d/mysqld-auth.conf里的failregex属性为

failregex = ^%(__prefix_line)s.+\[Note\] Access denied for user '\w+'@'<HOST>' (to database '[^']*'|\(using password: (YES|NO)\))*\s*$

这里的前面的ISO8601格式部分我偷懒没有严格验证,我这里只要是能把登录异常的从日志里挑出来就行了

测试fail2ban的正则是否起作用,可以使用fail2ban自带的fail2ban-regex命令

fail2ban-regex /var/log/mysql/error.log /etc/fail2ban/filter.d/mysqld-auth.conf

然后重启fail2ban,就可以了

在数据库里测试了下新加的JSON类型的字段,确实好用,配合虚拟列加索引已经可以代替很多NoSQL的场合了,而且还不像一些NoSQL数据库不支持事务,优势非常大

Show Comments