背景介绍
公司规划数据库去Oracle化,经讨论与综合比对,最后在MariaDB10和MySQL8之间,选择了MySQL8。
于是便申请了公司CentOS服务器的sudo权限,在上面搭建、研究MySQL数据库测试环境。
- 服务器:CentOS 7.0,拥有sudo权限的普通用户
- 数据库:mysql-8.0.18-linux-glibc2.12-x86_64.tar
- MySQL国内镜像下载地址: http://mirrors.ustc.edu.cn/mysql-ftp/Downloads/
因为是先安装后写文章记录,所以没有操作截图。
每个人的服务器环境不一样,可能会有各种各样的问题,即使按照网上的方法也会踩很多坑。(活生生的例子,网上查了很多教程,还是遇到各种各样的问题)
安装过程
1. 环境检查
检查是否安装MySQL 或 MariaDB:
rpm -qa | grep -E ‘mysql|mariadb‘
如果存在,则将其卸载掉:
rpm -e --nodeps 查询到的rpm
2. 环境准备
2.1 安装mysql依赖包:
yum install libaio
2.2 创建mysql安装目录与数据存放目录:
mkdir /usr/local/mysql
mkdir /usr/local/mysql/mysqldb
2.3 给安装和存放目录赋权:
sudo chmod -R 777 /usr/local/mysql
sudo chmod -R 777 /usr/local/mysqldb
2.4 创建mysql组:
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
说明:创建MySQL用户但该用户不能登陆(-s /bin/false参数指定mysql用户仅拥有所有权,而没有登录权限)
3. 安装准备
3.1 将安装包通过xftp上传至服务器,并解压:
cd /home/xxx/package
xz -d mysql-8.0.18-linux-glibc2.12-x86_64.tar.xz
tar -xvf mysql-8.0.18-linux-glibc2.12-x86_64.tar
3.2 复制解压结果到mysql安装目录:
cd /home/xxx/package/mysql-8.0.18-linux-glibc2.12-x86_64
cp -rf * /usr/local/mysql/
3.3 创建mysql配置文件
sudo vi /etc/my.conf
添加如下内容,然后保存并退出:
# 设置mysql客户端默认字符集
default-character-set=utf8
protocol=tcp
[mysqld]
#skip-name-resolve
#设置3306端口
port=3306
# 设置mysql的安装目录
basedir=/usr/local/mysql
# 设置mysql数据库的数据的存放目录
datadir=/usr/local/mysql/mysqldb
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
lower_case_table_names=1
max_allowed_packet=16M
[client]
#设置mysql客户端连接服务器默认使用端口
port=3306
#设置mosql客户端默认字符集
default-character-set=utf8
3.4 修改配置文件的拥有用户
chown xxx:xxx my.cnf
这里之所以修改,是因为服务器权限的原因,xxx是我使用的用户,为防止sudo权限被回收,先修改配置文件的拥有者。
4. 正式安装
cd /usr/local/mysql/bin
./mysqld --initialize --console --user=mysql
记住控制台打印出来的随机命令。
正常情况安装完成后,最后一行会输出completed,我这里出来了两种情况:一种是报错,日志中提示datadir目录相关的错误;还一个是自动结束了,没有提示completed。
第一个问题是根据日志信息,清空datadir目录,调整修改datadir目录的权限解决的;
第二个问题比较麻烦,直接自动退出了。一直没找到原因,最后我是又从官网换了个安装包,从头来过,然后通过。
4.启动服务
cd /usr/local/mysql/support-files
sudo ./mysql.server start
我这里报了两个错误:一个是找不到//var/run/mysqld/路径,一个是quit without PID file。
第一个问题是因为在my.cnf配置文件中加了:socket=/var/lib/mysql.sock引起的,注释掉;
第二个问题需要给安装目录重新授权下:chmod -R 777 /usr/local/mysql。
然后再重启:./mysql.server start,此时控制台最后会输出SUCCESS,提示启动成功。
5. 系统配置
5.1 mysql加入系统进程中:
sudo cp mysql.server
5.2 重启MySQL服务:
sudo service mysqld restart
5.3 建立软连接,在系统中增加mysql指令:
sudo ln -s /usr/local/mysql/bin/mysql /usr/bin
5.4 禁用防火墙
systemctl stopfirewalld.service
备注:我这里没有操作,由公司的系统组统一管控
6. mysql数据库初始设置
6.1 修改随机登陆密码:
mysql -uroot -p
输入上面记录的随机密码。
alter user ‘root‘@‘localhost‘ identified by ‘你的新密码‘;
必须先重置密码,否则会一直报错,提示:
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
6.2 设置允许远程登陆:
在已登录mysql数据库的前提下:
use mysql;
update user set user.Host=‘%‘ where user.User=‘root‘;
flush privileges;
quit
其他问题
数据库连接时报错
描述:执行mysql -uroot -p,输入密码后,报错:ERROR 1130 (HY000): Host ‘::1‘ is not allowed to connect to this MySQL server。
解决:在my.cnf配置中,注释掉skip_name_resolve,重启服务后正常