CentOS 7 安装 MySQL 5.7
一.安装前的准备工作
- 卸载自带的MariaDB
# 查询已安装的 mariadb 版本 rpm -qa | grep mariadb # 如果本地存在该软件,则会显示软件完整名称 # 例如:mariadb-libs-5.5.64-1.el7.x86_64 # 卸载 mariadb rpm -e --nodeps mariadb-libs-5.5.64-1.el7.x86_64
- 检查numactl依赖是否安装
# 先使用查询电脑是否已经安装了numactl依赖 rpm -qa|grep numactl # 如果已经安装则不需要执行这条 yum -y install numactl.x86_64
- 下载MySQL包
官网:下载# 切换到一个目录用来存放下载的包 /usr/local # 接下来我会将软件安装到这个文件夹中,如果与我不同,注意下面的操作按需更改路径 # 使用wget方式下载mysql-5.7.29 wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.29-linux-glibc2.12-x86_64.tar.gz
二.安装和配置
- 解压
# 解压包 tar -zxvf mysql-5.7.29-linux-glibc2.12-x86_64.tar.gz # 将解压的包改名为mysql mv mysql-5.7.29-linux-glibc2.12-x86_64 mysql # 创建数据库文件存放位置 mkdir /usr/local/mysql/data
- 创建mysql用户用来维护数据库
# 创建用户组:mysql groupadd mysql # 创建新用户mysql并添加到mysql用户组 # useradd -g 用户组 新用户名 useradd -g mysql mysql # 修改mysql用户的密码,长度超过8位连续输入两次 passwd mysql # 赋予mysql用户安装路径的权限 # chown -R 用户名:用户组 路径 chown -R mysql:mysql /usr/local/mysql
- 安装
# 切换到bin目录 cd /usr/local/mysql/bin # 生成数据库实例 ./mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data # 生成的初始化密码一定要记下来,否则后面重制密码特别费劲
- 配置mysql系统参数
将以下文本拷入,如果安装路径不同,请自行更改# 在etc下创建mysql的配置文件 touch /etc/my.cnf # 我用nano文本编辑器,没有的可以下一个或者用vi nano /etc/my.cnf
[mysql] default-character-set=utf8mb4 [mysqld] character_set_server=utf8mb4 # mysql安装位置 basedir=/usr/local/mysql # mysql数据库文件保存路径 datadir=/usr/local/mysql/data lower_case_table_names = 1 # 启动日志位置 log-error=/var/log/mysqld.log # mysql启动时进程ID临时保存位置,需要手动创建对应空文件 pid-file=/usr/local/mysql/data/mysqld.pid
- 将mysql配置到系统服务中
# 拷贝mysql系统服务文件到系统服务文件夹下 cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql # 编辑文件 nano /etc/init.d/mysql # 将basedir和datadir添加安装时配置的对应属性 basedir=/usr/local/mysql datadir=/usr/local/mysql/data
- 将mysql配置到系统自启中
chkconfig --add mysql chkconfig mysql on
- 将mysql配置到环境变量中
# 编辑 /etc/profile 文件 nano /etc/profile # 在文件末尾添加以下文本 export PATH=$PATH:/usr/local/mysql/bin # 保存并退出 # 刷新配置文件 source /etc/profile # 测试 mysql --version
- 问题:
rm: cannot remove '/var/lock/subsys/mysql': Permission denied
如果遇到以上问题,去/var/lock/subsys把mysql这个空文件删除。
三.初始化MySQL
- 启动
注意:以下操作需要切换到新创建的用户下操作,否则会出现各种权限问题。# 确保mysql关闭 service mysql stop # 启动mysql service mysql start
- 检查mysql是否成功设置开机自启
chkconfig | grep -i mysql # 3、4、5为on则成功,如果不是则执行 chkconfig --level 345 mysql on
- 修改root密码
如果遗失初始化的密码,请按照第四节方法初始化密码。# 因为刚生成实例的mysql不修改root密码是禁止操作数据库的 # 所以在外部环境就需要使用mysqladmin修改密码,前提mysql服务是启动的 # 注意!如果宿主机和数据库不能保证在安全的连接下请勿使用此方法 mysqladmin -u root -p password "新密码" # mysql会要求你输入原root用户密码,将初始化生成的密码粘进去
- 登陆
mysql -uroot -p
如果还没有重置密码,可以使用初始密码登陆进来,然后使用命令修改:set password for root@localhost = password('新密码');
- 新建用户并配置数据库权限
-- 创建用户 CREATE USER '用户名'@'%' IDENTIFIED BY '用户密码'; -- 配置权限(详细的看有关权限的文档) GRANT SELECT, INSERT ON 数据库.* TO '用户'@'%'; -- 刷新 flush privileges;
- 配置防火墙
如果安装并启用了防火墙(firewalld),需要为数据库的端口开通。# 查看防火墙状态,启动时状态为active (running) systemctl status firewalld # 开启端口 firewall-cmd --zone=public --add-port=3306/tcp --permanent # 刷新防火墙 firewall-cmd --reload # 查看已开启端口 firewall-cmd --list-ports
四.忘记密码时修改密码的方法
- 使用root用户修改 /etc/my.cnf 文件
nano /etc/my.cnf # 在[mysqld]后加入以下文本 skip-grant-tables
- 重启mysql服务
service mysql restart
- 执行以下命令跳过密码进入mysql进行修改密码
# 登陆mysql cd /usr/local/mysql/bin ./mysql # 重置密码,进入库mysql use mysql; # 重置密码,注意不同版本的密码列名不同,用desc user查看 update user set authentication_string=password("wasd2020") where user="root"; # 刷新缓存表 flush privileges; # 退出 quit;
- 再修改 /etc/my.cnf 文件,将免密语句注释
nano /etc/my.cnf # 用#注释掉skip-grant-tables #skip-grant-tables # 保存并退出
- 重启mysql服务
service mysql restart
- 密码已经重置成功,使用新密码登陆即可