腾讯云CentOS 7.4 64位 安装Mysql 5.6以及解决Mysql5.6内存占用过高问题

背景

  1. 服务器:腾讯云CentOS 7.4 64位
  2. 数据库:Mysql 5.6.43 下载地址:https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.43-linux-glibc2.12-x86_64.tar.gz

安装

由于CentOS 7中默认数据库由Mysql替换为了Mariadb,所以我们需要先将其卸载

MariaDB是MySQL关系数据库管理系统的一个复刻,由社区开发,有商业支持,旨在继续保持在GNU GPL下开源。MariaDB的开发是由MySQL的一些原始开发者领导的,他们担心甲骨文公司收购MySQL后会有一些隐患。
MariaDB打算保持与MySQL的高度兼容性,确保具有库二进制奇偶校验的直接替换功能,以及与MySQL API和命令的精确匹配。 MariaDB自带了一个新的存储引擎Aria,它可以替代MyISAM,成为默认的事务和非事务引擎。它最初使用XtraDB作为默认存储引擎, 并从10.2版本切换回InnoDB。
它的首席开发人员是米卡埃尔·维德纽斯,他是MySQL AB的创始人之一,也是Monty Program AB的创始人。2008年1月16日,MySQL AB 宣布它已经同意被太阳微系统集团以大约10亿美元的价格收购。该项收购已于2008年2月26日完成。MariaDB是以Monty的小女儿Maria命名的,就像MySQL是以他另一个女儿My命名的一样。

1、卸载Mariadb

使用shell工具进入CentOS 7.4

查询出CentOS中预装的mariadb并强制删除

[root@VM_0_16_centos ~]# rpm -qa | grep mariadb
mariadb-libs-5.5.56-2.el7.x86_64
[root@VM_0_16_centos ~]# rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64

2、删除my.cnf文件

[root@VM_0_16_centos ~]# rm /etc/my.cnf

如果上一步操作中自动删除了就无需处理

3、创建mysql用户组

[root@VM_0_16_centos ~]# groupadd mysql

4、创建一个名为mysql的用户并将其添加进mysql用户组

[root@VM_0_16_centos ~]# useradd -g mysql mysql

5、拷贝并解压安装包
将之前mysql的安装包拷贝至 /usr/local/ 目录下并解压

[root@VM_0_16_centos local]# tar -zxvf mysql-5.6.43-linux-glibc2.12-x86_64.tar.gz

6、将解压后的文件夹重命名
默认名字太长了,重命名为mysql

[root@VM_0_16_centos local]# mv mysql-5.6.43-linux-glibc2.12-x86_64 mysql

7、创建my.cnf文件
我们可以从mysqlsupport-files文件夹里拷贝一份默认cnf文件到/etc

[root@VM_0_16_centos support-files]# cp my-default.cnf /etc/my.cnf

通过vim编辑my.cnf配置
后文会针对mysql5.6占用内存过大对该配置文件作出修改

[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
socket=/var/lib/mysql/mysql.sock

[mysqld]
skip-name-resolve
#设置3306端口
port = 3306
socket=/var/lib/mysql/mysql.sock
# 设置mysql的安装目录
basedir=/usr/local/mysql
# 设置mysql数据库的数据的存放目录
datadir=/usr/local/mysql/data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
lower_case_table_name=1
max_allowed_packet=16M

8、执行mysql安装命令

// 进入mysql文件夹
[root@VM_0_16_centos ~]# cd /usr/local/mysql
// 将mysql文件夹及子目录用户和用户组都修改为mysql
[root@VM_0_16_centos mysql]# chown -R mysql:mysql ./
// 执行mysql安装
[root@VM_0_16_centos mysql]# ./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/ 安装数据库

安装过程可能出现的问题:


在这里插入图片描述
缺少autoconf

[root@VM_0_16_centos ~]# yum -y install autoconf

安装完成后再次执行mysql安装命令
在这里插入图片描述
如果出现该报错,需要安装numactl64位

[root@VM_0_16_centos ~]# yum -y install numactl.x86_64

再次执行mysql安装命令,应该可以安装成功了


配置

1、修改my.cnf权限

[root@VM_0_16_centos ~]# chmod 777 /etc/my.cnf

参考的文章中将my.cnf文件修改为最高权限,但这样是有问题的,正确的应该是644权限
可以先按照777来,看下为什么会出现问题,然后再修改,这样也能加深印象

2、复制启动脚本到资源目录

[root@VM_0_16_centos mysql]# cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld

3、增加mysqld服务控制脚本执行权限

[root@VM_0_16_centos mysql]# chmod +x /etc/rc.d/init.d/mysqld

4、将mysqld服务加入到系统服务

[root@VM_0_16_centos mysql]# chkconfig --add mysqld

5、检查mysqld服务是否已经生效

[root@VM_0_16_centos mysql]# chkconfig --list mysqld

命令输出类似下面的结果:

mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off

表明mysqld服务已经生效,在2、3、4、5运行级别随系统启动而自动启动,以后可以使用service命令控制mysql的启动和停止
命令为:service mysqld startservice mysqld stop

6、启动mysqld

[root@VM_0_16_centos mysql]# service mysqld start

启动可能出现的问题:
在这里插入图片描述
这是由于之前在my.cnf文件中指定socket=/var/lib/mysql/mysql.sock,而我们还没有创建该目录,所以需要创建并赋予最大权限

[root@VM_0_16_centos ~]# cd /var/lib
[root@VM_0_16_centos lib]# mkdir mysql
[root@VM_0_16_centos lib]# chmod 777 mysql

在这里插入图片描述
如果之前将my.cnf修改为了777权限的话,这里虽然启动起来了,但给了我们一个警告:由于/etc/my.cnf配置文件是777权限的,存在很大的安全隐患,所以启动时被忽略了。我们需要降低权限为644并重新启动mysql

[root@VM_0_16_centos lib]# chmod 644 /etc/my.cnf

到此mysql可以正常启动

7、将mysql的bin目录加入PATH环境变量

[root@VM_0_16_centos lib]# vim ~/.bash_profile

在文件最后添加如下信息:export PATH=$PATH:/usr/local/mysql/binwq保存并退出
使配置文件即时生效:

[root@VM_0_16_centos lib]# source ~/.bash_profile

8、登录mysql

[root@VM_0_16_centos ~]# mysql -uroot -p

默认没有密码,直接回车登录

9、修改mysql密码

mysql>use mysql;
mysql>update user set password=password('你设置的密码') where user='root' and host='localhost';
mysql>flush privileges;

10、外网可以访问mysql

mysql>GRANT ALL PRIVILEGES ON *.* TO '你设置的用户名'@'%' IDENTIFIED BY '你设置的密码' WITH
GRANT OPTION;

到此CentOS 7.4安装Mysql 5.6就结束了


关于mysql5.6占用内存

由于大家购买的虚拟机内存可能就1G或者2G,而Mysql5.6在启动后就会占用400MB以上的内存,这对于并发量不高的个人业务来说是非常难受的,所以我们需要调整Mysql占用内存大小
在my.cnf配置文件下加上以下命令:

#减少mysql5.6内存占用
performance_schema_max_table_instances=400
table_definition_cache=400
table_open_cache=256

其中table_definition_cache最小值为400,低于这个值也会自动调整为400
腾讯云CentOS 7.4 64位 安装Mysql 5.6以及解决Mysql5.6内存占用过高问题_第1张图片
效果还是很明显的,我的虚拟机内存为2G,之前启动Mysql后内存占用率为32%,修改后内存占用率为13%。当然,这是牺牲性能从而优化内存,适用于个人或并发量很小的业务,具体Mysql配置还需要根据实际情况优化处理


参考文档

Centos7安装并配置mysql5.6完美教程 是一篇很好的文章,文章中有几个小问题已经在本文中优化。

你可能感兴趣的:(SQL)