手动安装便于后期维护,并且更加通用
本文记录安装过程和遇到问题,仅供复习和参考,有问题欢迎指正
新建MySQL目录
mkdir /app/mysql5.7.8 # 主程序目录
mkdir /data/mysql # 数据库目录
mkdir /config # 配置目录
新建MySQL用户
useradd -s /sbin/nologin mysql # -s指定登录的ssh,/sbin/nologin为禁止ssh登录。
解压MySQL安装包
这里发现不能用迅雷下载后直接拖进虚拟机,会解压出错
wget不行就自行找别的办法上传安装包
wget https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.8-rc-linux-glibc2.5-x86_64.tar.gz # 下载安装包
tar -xzvf mysql-5.7.8-rc-linux-glibc2.5-x86_64.tar.gz # 解压到当前目录
mv mysql-5.7.8-rc-linux-glibc2.5-x86_64/* /app/mysql5.7.8/ # 移动到主程序目录
rmdir mysql-5.7.8-rc-linux-glibc2.5-x86_64/ # 删除空目录,非空会报错
配置MySQL环境变量
echo "export PATH=\"/app/mysql5.7.8/bin:\$PATH\"" >> /etc/profile # 写入环境变量文件末尾
source /etc/profile # 刷新环境变量
mysql -V # 测试是否生效
# 变量生效,但发生报错,缺少libncurses.so.5组件
>> mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory
# 检查/usr/lib64目录,发现RHEL9使用了新版本组件,这里使用软链接解决
ln -s /usr/lib64/libncurses.so.6.1 /usr/lib64/libncurses.so.5
mysql -V # 再次测试
>> mysql Ver 14.14 Distrib 5.7.8-rc, for linux-glibc2.5 (x86_64) using EditLine wrapper
初始化MySQL数据库
mysqld --initialize-insecure --user=mysql --basedir=/app/mysql5.7.8/ --datadir=/data/mysql/ # 初始化命令
ls /data/mysql/ # 检查生成的文件
>> auto.cnf ib_buffer_pool ibdata1 ib_logfile0 ib_logfile1 mysql performance_schema sys
新建MySQL配置
vi /config/mysql.cnf # 新建配置
#服务端配置
[mysqld]
#主程序目录
basedir=/app/mysql5.7.8
#数据库目录
datadir=/data/mysql
#MySQL用户
user=mysql
#服务器id号
server_id=1
#端口号
port=3306
修改MySQL文件所有权
chown -R mysql:mysql /app/mysql5.7.8/* # 主程序目录
chown -R mysql:mysql /data/mysql/* # 数据库目录
chown -R mysql:mysql mysql.cnf # 配置文件
配置SELinux安全上下文
非默认目录运行会被SELinux阻止,需要为自定义的目录添加安全上下文(本文耗时最久地方就是配上下文。。)
semanage fcontext -a -t mysqld_initrc_exec_t "/app/mysql5.7.8/bin/mysqld" # mysqld添加 mysqld_initrc_exec_t 类型安全上下文
restorecon -v "/app/mysql5.7.8/bin/mysqld" # 恢复安全上下文配置
semanage fcontext -a -t mysqld_var_run_t "/app/mysql5.7.8(/.*)" # 主程序目录添加 mysqld_var_run_t 类型安全上下文
restorecon -Rv "/app/mysql5.7.8/" # 恢复安全上下文配置
semanage fcontext -a -t mysqld_db_t "/data/mysql(/.*)?" # 数据库目录添加mysqld_db_t类型的安全上下文
restorecon -Rv "/data/mysql/" # 恢复安全上下文位置
semanage fcontext -a -t mysqld_etc_t "/config/mysql.cnf" # 配置文件添加mysqld_etc_t类型的安全上下文
restorecon -v "/config/mysql.cnf" # 恢复安全上下文配置
# semanage fcontext -l | grep -i mysqld 列出mysqld相关的安全上下文
# semanage fcontext -a -f s -t mysqld_var_run_t "/tmp/mysql\.sock" # sock文件安全上下文
# semanage fcontext -a -t mysqld_var_run_t "/data/mysql/*.pid" pid文件安全上下文
配置systemd服务
vi /etc/systemd/system/mysqld.service # 新建服务
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/app/mysql5.7.8/bin/mysqld --defaults-file=/config/mysql.cnf
LimitNOFILE = 5000
启动systemd服务
systemctl start mysqld.service # 启动服务
systemctl status mysqld.service # 查看状态
systemctl enable mysqld.service # 加入启动项
# journalctl -xe 查看日志
设置MySQL密码
mysqladmin -u root password 123456
允许MySQL远程登录
mysql -uroot -p123456 # root登录MySQL
mysql> use mysql; # 选择MySQL系统数据库
mysql> update user set host="%" where host="localhost"; # 更新用户表
mysql> flush privileges; # 刷新数据库
mysql> quit; # 退出数据库
放行MySQL端口
firewall-cmd --zone=public --permanent --add-service=mysql # public是默认接口,mysql是系统预配置
firewall-cmd --reload # 重载防火墙
# firewall-cmd --list-all 检查防火墙状态
# firewall-cmd --get-services 检查可用的系统预配置