1、下载mysql包
下载地址:https://dev.mysql.com/downloads/mysql/
选择对应的版本,mysql目前用的最多的是5.6,5.7和8.0版本,本文选的是mysql 5.7
下面图中选择RPM Bundle,点击download
备注:
1、rpm package:是某个特定的包,比如server,client,shared lib等 ---- 可以单独安装
2、rpm bundle:是该版本所有包的集合 ---- 一般是把服务器端要用的都安装上,其他的不带,尤其是开发包
3、Compressed TAR Archive,是源码,必须用源码方式安装。 ---- 这个是源码,需要自己编译的,也有编译好,但不是安装包的
点击Download后跳转到此页,不用登录或注册,直接下载即可
2、上传包到服务器并解压
将下载的包rz命令上传到服务器
解压:tar -xvf mysql-5.7.41-1.el7.x86_64.rpm-bundle.tar
3、安装
各rpm包是有依赖关系的,所以需要按照一定顺序进行安装,安装期间如果提示缺少哪些依赖也要先安装相应的包:
[root@localhost ~]# rpm -ivh mysql-community-common-5.7.41-1.el7.x86_64.rpm
[root@localhost ~]# rpm -ivh mysql-community-libs-5.7.41-1.el7.x86_64.rpm
[root@localhost ~]# rpm -ivh mysql-community-client-5.7.41-1.el7.x86_64.rpm
[root@localhost ~]# rpm -ivh mysql-community-server-5.7.41-1.el7.x86_64.rpm
4、启动mysql
启动:systemctl start mysqld.service
查看状态:systemctl status mysqld.service
停止:systemctl stop mysqld.service
重启:systemctl restart mysqld.service
5、设置
mysql第一次启动后会创建超级管理员账号root@localhost
,初始密码存储在日志文件中:
sudo grep 'temporary password' /var/log/mysqld.log
5.1修改密码
[root@localhost ~]# mysql -uroot -p
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '$password'
但是提示是密码太简单了,解决方法如下:
- 使用复杂密码,MySQL默认的密码策略是要包含数字、字母及特殊字符;
- 如果只是测试用,不想用那么复杂的密码,可以修改默认策略,即
validate_password_policy
(以及validate_password_length
等相关参数),使其支持简单密码的设定,具体方法可以自行百度; - 修改配置文件
/etc/my.cnf
,添加validate_password=OFF
,保存并重启MySQL
考虑安全问题,一定不要修改成简单密码!
5.2允许root访问
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '$password' WITH GRANT OPTION;
5.3修改编码为utf-8
查看字符
mysql> SHOW VARIABLES LIKE 'character%';
退出mysql命令输入exit回车
编辑/etc/my.cnf,[mysqld]节点增加以下代码:
[mysqld]
character_set_server=utf8
init-connect='SET NAMES utf8'
重启mysqld服务systemctl restart mysqld.service
再次查看字符集已经修改成utf-8
5.4设置开机启动
[root@localhost ~]# systemctl enable mysqld
[root@localhost ~]# systemctl daemon-reload
6、设置数据存储路径(datadir)
登录mysql后,查看存储路径
mysql> show global variables like '%datadir%';
默认是/var/lib/mysql
我们要将rbd卷作为mysql数据存储路径,需要先新建rbd卷,xfs格式化,新建目录/root/data,挂载到新目录。
也可以使用rbd克隆卷作为mysql数据存储路径,如下图中先新建rbd卷,再创建克隆卷,同样xfs格式化后挂载到新目录。
完成以上操作后,按以下步骤执行:
1、拷贝原数据库内容到新建目录,修改目录权限和用户组
cp -a -R /var/lib/mysql/* /root/data/
chown mysql:mysql /root/data
chmod 750 /root/data
2、停mysqld服务,修改配置文件
先停止mysqld服务
systemctl stop mysqld
systemctl status mysqld
vi /etc/my.cnf
3、禁用SELINUX
编辑/etc/selinux/config 文件,将其中的SELINUX禁用,SELINUX=disabled,重新启动系统
4、做软链接
ln -s /root/data/mysql.sock /var/lib/mysql/mysql.sock
5、启动mysql
systemctl start mysqld.service
启动报错查看问题2
6、重启成功后登录mysql查看datadir
已经更新成为/root/data
此时mysql的数据存储路径已改为rbd卷挂载的路径,底层数据存储到ceph集群
7、遇到的问题
7.1安装mysql-community-common-5.7.41-1.el7.x86_64.rpm 时报错 conflicts with file from package mariadb-libs-1:5.5.60-1.el7_5.x86_64
解决:
1)检查mariadb
[root@localhost ~]# rpm -qa|grep mariadb
2)删除mariadb
[root@localhost ~]# rpm -e --nodeps mariadb-libs
[root@localhost ~]# rpm -qa|grep mariadb
[root@localhost ~]#
7.2安装mysql-community-server缺少依赖包
解决:
yum install -y perl
yum install -y net-tools
7.3启动mysqld服务报错, Errcode:13
使用journalctl -xe查看日志发现报错:
Jan 29 14:55:40 localhost.localdomain mysqld[4806]: mysqld: Can't change dir to '/root/data/' (Errcode: 13 - Permission denied)
Jan 29 14:55:40 localhost.localdomain mysqld[4806]: 2023-01-29T06:55:40.015862Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please us
Jan 29 14:55:40 localhost.localdomain mysqld[4806]: 2023-01-29T06:55:40.016084Z 0 [Warning] Can't create test file /root/data/localhost.lower-test
Jan 29 14:55:40 localhost.localdomain mysqld[4806]: 2023-01-29T06:55:40.016133Z 0 [Note] /usr/sbin/mysqld (mysqld 5.7.41) starting as process 4808 ...
Jan 29 14:55:40 localhost.localdomain mysqld[4806]: 2023-01-29T06:55:40.019198Z 0 [Warning] Can't create test file /root/data/localhost.lower-test
Jan 29 14:55:40 localhost.localdomain mysqld[4806]: 2023-01-29T06:55:40.019209Z 0 [Warning] Can't create test file /root/data/localhost.lower-test
权限错误(Errcode: 13)解决方法:
1 查看导出目录的权限 是否有mysql用户写的权限
2 如果有多级目录,要确保到处目录的上级目录有可执行权限,如果是/root目录 700要修改705 否则写不进
3 查看 seLinux 有没有关闭 ,如果没有关闭可以执行 setenforce 0,然后vi /etc/selinux/config 确保 SELINUX=disabled
解决:
chmod 705 /root
然后重启mysql服务成功!
7.4mysqld.log日志默认时间比系统时间少8h?
修改/etc/my.cnf
#加上下面这一行,保证日志跟系统时间保持一致
log_timestamps=SYSTEM