一、添加MySQL Yum存储库
首先,将MySQL Yum存储库添加到系统的存储库列表中。这是一次性操作,可以通过安装MySQL提供的RPM来执行。
MySQL Developer Zone中的下载MySQL Yum存储库页面: https://dev.mysql.com/downloads/repo/yum/
注意
一旦在您的系统上启用了MySQL Yum存储库,如果yum update 命令(或Fedora的dnf升级)找到更高的版本,都将升级系统上的MySQL软件包并替换任何本机第三方软件包。
官网最新的库包含MySQL8.0,稳妥起见提供一个官方的旧版本repo地址,防止yum update把MySQL更新到最新。当然,最稳妥的办法是安装完毕后把库文件删除。
https://repo.mysql.com/mysql57-community-release-el7-8.noarch.rpm
shell> rpm -Uvh mysql57-community-release-el7-8.noarch.rpm
安装命令将MySQL Yum存储库添加到系统的存储库列表中,并下载GnuPG密钥以检查软件包的完整性。
shell> yum repolist enabled | grep "mysql.*-community.*"
二、确认选择发布系列
vi /etc/yum.repos.d/mysql-community.repo,找到要配置的子存储库的条目,然后编辑该enabled选项。
指定 enabled=0禁用子存储库,或 enabled=1启用子存储库,确认mysql57为开启状态,其余为关闭状态。
[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/6/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
您应该确保只启用一个MySQL系列的存储库。当启用多个版本系列的子存储库时,Yum将使用最新的系列。
shell> yum repolist enabled | grep mysql
三、安装MySQL
通过以下命令安装MySQ:
shell> sudo yum install mysql-community-server
这将安装MySQL server(mysql-community-server)以及运行服务器所需组件的,包括client(mysql-community-client)
客户端和服务器的常见错误消息和字符集(mysql-community-common)以及共享客户端库(mysql-community-libs)
最后建议把 mysql-community-lib-compat也装上(替换mariadb-lib)。
yum 安装的好处就是自动帮助处理缺少的依赖包和解决冲突包,例如安装libaio和net-tools,删除mariadb-lib……否则RPM安装的时候还要手工处理这些问题,这里就不展开了
四、初始化
1、编辑systemd和my.cnf
从MySQL 5.7.10开始,通过yum、RPM安装时,已经把默认使用systemd替换掉了原来的mysqld_safe;
使用systemctl edit mysqld或者修改/etc/systemd/system/mysqld.service.d/override.conf来更改PIDFile和Execstart的路径,从而实现自定义参数,/etc/systemd/system/mysqld.service.d若不存在请自行创建。
原有SQL的配置文件(这里一般指/etc/my.cnf)任何关于PIDFile的设置将被忽略,部分mysql_safe的参数要进行修改,部分可以配置到[mysqld],这里不做展开了
启动参数(ExecStart)必须设置PIDFile的路径,第一个“ExecStart=”这一行不能省去,删掉的话将不能启动;猜测逻辑是先用空参数覆盖/usr/lib/systemd/system/mysqld.service 的启动参数,再通过第二个含参数的ExecStart实现自定义参数启动
最后,systemd配置方式和mysqld_safe是相互冲突的,因此自编译的时候尤其注意(RPM、yum安装的默默接受systemd这个事实吧……)
编写override.conf
[Service]
PIDFile=/opt/mysql/mysqld.pid
ExecStart=
ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/opt/mysql/DB_Server01.pid $MYSQLD_OPTS
编写/etc/my.cnf
[mysqld]
server-id = 1
port = 3306
event_scheduler = 1
character-set-server = utf8
collation-server = utf8_general_ci
default-storage-engine = INNODB
default-time-zone = '+08:00'
bind-address = 0.0.0.0
symbolic-links = 0
user = mysql
socket = /opt/mysql/mysqld.sock
datadir = /opt/mysql/data
tmpdir = /opt/mysql/tmp
skip-external-locking
max_connections = 1000
max_allowed_packet = 500M
key_buffer_size = 16M
thread_stack = 192K
thread_cache_size = 8
query_cache_limit = 1M
query_cache_size = 16M
#########log file setting##########
log_timestamps = SYSTEM
log_error = /opt/mysql/log/error.log
log-bin = /opt/mysql/log/DB_Server01-mysql-bin
binlog-format=Row
expire_logs_days = 10
max_binlog_size = 100M
slow-query-log-file = /opt/mysql/DB_Server01-slow.log
general-log-file = /opt/mysql/log/DB_Server01.log
[client]
default-character-set = utf8
socket = /opt/mysql/mysqld.sock
初始化的时候必须设置--defaults-file,否则不会自动读取/etc/my.cnf(从5.6过来最常见的陨石巨坑)
mysqld --defaults-file=/etc/my.cnf --initialize
划重点:my.cnf内标识了使用mysql用户,因此my.cnf内所有提及到的目录的所有者必须为mysql,否则将不能成功启动。
chown -Rh mysql.mysql /opt/mysql
五、启动MySQL服务器
使用以下命令启动MySQL服务器:
shell> sudo service mysqld start
您可以使用以下命令检查MySQL服务器的状态:
shell> sudo service mysqld status
在服务器初始启动时,如果服务器的数据目录为空,则会发生以下情况:
服务器已初始化。
SSL证书和密钥文件在数据目录中生成。
validate_password 已安装并已启用。
将'root'@'localhost创建一个超级用户帐户。设置超级用户的密码并将其存储在错误日志文件中。要显示它,请使用以下命令:
获取root初始自动生成的临时密码:
shell> sudo grep 'temporary password' /var/log/mysqld.log | awk -F":" '{print $4}' (这是默认情况)
如果使用上文的my.cnf初始化,并且修改过log的路径,则自行替换,如上面列出的my.cnf,log_error = /opt/mysql/log/error.log,那么就对应修改为:
shell> sudo grep 'temporary password' /opt/mysql/log/error.log | awk -F":" '{print $5}'
(由于my.cnf里面增加了+08:00,修改后就是print $5,不要照搬)
通过使用生成的临时密码登录并为超级用户帐户设置自定义密码,尽快更改root密码:
shell> mysql -uroot -p
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';
题外话:没事不要乱升级,有可能因为一个小版本导致你在安装的过程中怀疑人生,这是我折腾了3天的真实感受……