MySQL8 安装包
检查glibc版本
[root@test-02 mysql]# rpm -qa | grep glibc
glibc-headers-2.17-326.el7_9.x86_64
glibc-2.17-326.el7_9.x86_64
glibc-devel-2.17-326.el7_9.x86_64
glibc-common-2.17-326.el7_9.x86_64
下载对应glibc版本的安装包
wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.27-linux-glibc2.17-x86_64.tar.xz
存放目录 : /opt/soft/mysql
1、MySQL安装
安装依赖
- centos依赖
sudo yum -y install libaio
sudo yum -y install ncurses-compat-libs
sudo yum -y install numactl
- debian依赖
sudo apt-get install numactl
调整 libtinfo
centos7 / debian9 默认的是libtinfo.so.6,而 mysql 需要的是libtinfo.so.5,所以创建软连接 ;
libtinfo.so.5 软链接要和 libtinfo.so.6 位置相同。
- centos
sudo whereis libtinfo.so.6
sudo ln -s /usr/lib64/libtinfo.so.6.1 /usr/lib64/libtinfo.so.5
- debian
sudo whereis libtinfo.so.6
sudo ln -s /usr/lib/x86_64-linux-gnu/libtinfo.so.6 /usr/lib/x86_64-linux-gnu/libtinfo.so.5
解压,配置
sudo tar -xvf /opt/soft/mysql/mysql-8.0.22-linux-glibc2.12-x86_64.tar.xz
sudo mv /opt/soft/mysql/mysql-8.0.22-linux-glibc2.12-x86_64 /opt/soft/mysql/mysql8
# 在/etc/profile文件末尾添加
export PATH=$PATH:/opt/soft/mysql/mysql8/bin
创建用于运行MySQL的组和用户
sudo groupadd mysql # 创建MySQL组
sudo useradd -r -g mysql -s /bin/false mysql # 添加mysql用户
usermod -G mysql $USER # 把当前登录用户加入mysql组
创建导入导出操作安全目录
# 该目录用于使具有FILE权限的用户可以安全地执行导入导出操作
sudo mkdir /opt/soft/mysql/mysql8/mysql-files
# 创建数据目录
sudo mkdir /opt/soft/mysql/mysql8/data
# 改变目录所属
sudo chown -R mysql:mysql /opt/soft/mysql
# 授权
sudo chmod -R 777 /opt/soft/mysql
mysql配置文件
# 创建MySQL服务启动需要用到的静态配置文件(固定名称)
sudo touch /etc/my.cnf
sudo chown root:root /etc/my.cnf
sudo chmod -R 777 /etc/my.cnf
- /etc/my.cnf文件内容:
[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir=/opt/soft/mysql/mysql8
# 设置mysql数据库的数据的存放目录
datadir=/opt/soft/mysql/mysql8/data
# soket文件,本地连接时使用,mysql默认位置
socket=/tmp/mysql.sock
# 日志
log-error=/opt/soft/mysql/mysql8/data/mysqld_error.log
# pid文件
pid-file=/opt/soft/mysql/mysql8/data/mysqld.pid
# 创建导入导出操作安全目录
secure_file_priv=/opt/soft/mysql/mysql8/mysql-files
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
# 服务端使用的字符集默认为UTF8
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
default-time-zone='+08:00'
# 慢查询配置
slow_query_log=ON
slow_query_log_file =/opt/soft/mysql/mysql8/data/slow.log
# 单位时秒
long_query_time=2
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8
# 这个配置可以放开,但必须和上面 [mysqld] 中 socket 属性一致
#socket=/tmp/mysql.sock
修改my.cnf权限
sudo chmod -R 555 /etc/my.cnf
修改 mysql.server 文件
# 修改$mysql_home/support-files/mysql.server
vim /opt/soft/mysql/mysql8/support-files/mysql.server
- 修改mysql.server文件内容:
mysql.server文件可修改basedir,datadir,my.cnf 等文件的位置;
mysql.server中的 basedir,datadir 位置要和my.cnf 中的basedir,datadir 位置相同。
# basedir=
basedir=/opt/soft/mysql/mysql8
# datadir=
datadir=/opt/soft/mysql/mysql8/data
安装mysql(要记住密码)
sudo /opt/soft/mysql/mysql8/bin/mysqld \
--defaults-file=/etc/my.cnf \
--user=mysql \
--basedir=/opt/soft/mysql/mysql8 \
--datadir=/opt/soft/mysql/mysql8/data \
--initialize --console
## 密码可查看/opt/soft/mysql/mysql8/data/mysqld_error.log(my.cnf 中log-error属性值) 文件
启动mysql 服务
sudo chmod -R 777 /opt/soft/mysql
sudo /opt/soft/mysql/mysql8/support-files/mysql.server start
# 然后就可以登录了。(mysql -u root -p )
# 【注意】最好把这一步也完成了
sudo cp /opt/soft/mysql/mysql8/support-files/mysql.server /etc/init.d/mysqld
sudo chmod 777 /etc/init.d/mysqld
# 重新启动
service mysqld restart
2、使用systemd管理MySQL8
# 在系统服务单元配置文件存放目下创建MySQL的服务单元配置文件
# mysqld.service 内容下边介绍
# 配置之后,此时我们已经可以通过systemctl工具手工管理MySQL服务
# systemctl {start|stop|restart|status|enable|disable|is-enabled} mysqld.service
sudo touch /usr/lib/systemd/system/mysqld.service
sudo chmod 644 /usr/lib/systemd/system/mysqld.service
sudo systemctl start mysqld.service # 开启服务
sudo systemctl status mysqld.service # 查看状态
- 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]
# mysql 用户组和用户名
User=mysql
Group=mysql
# Have mysqld write its state to the systemd notify socket
Type=notify
# Disable service start and stop timeout logic of systemd for mysqld service.
TimeoutSec=0
# Start main service 配置MySQL启动命令
ExecStart=/opt/soft/mysql/mysql8/bin/mysqld $MYSQLD_OPTS
# ExecStart=/opt/soft/mysql/mysql8/support-files/mysql.server $MYSQLD_OPTS
# ExecStart=/opt/soft/mysql/mysql8/bin/mysqld --defaults-file=/etc/my.cnf $MYSQLD_OPTS
# Use this to switch malloc implementation
EnvironmentFile=-/etc/sysconfig/mysql
# Sets open_files_limit
LimitNOFILE = 10000
Restart=on-failure
RestartPreventExitStatus=1
# Set environment variable MYSQLD_PARENT_PID. This is required for restart.
Environment=MYSQLD_PARENT_PID=1
PrivateTmp=false
3、修改root等操作
登录mysql : mysql -u root -p
然后输入初始密码
alter user 'root'@'localhost'IDENTIFIED BY '123456'; -- 修改root 密码
grant all privileges on *.* to 'root'@'localhost'; -- 授于 root@localhost 所有权限
-- 设置远程登录
CREATE USER 'root'@'%' IDENTIFIED BY '123456';
grant all privileges on *.* to 'root'@'%';
flush privileges;
mysql一些操作
-- 查询所有用户
SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;
-- 创建用户
create user 'test'@'%' identified by '123456';
-- 用户授权
grant all privileges on *.* to 'test'@'%' ;
-- 刷新权限
flush privileges;
-- 删除用户
drop user 'test'@'%';
4、可选配置( 这好像是 service 服务管理 mysql 的配置 )
sudo cp /opt/softs/mysql/mysql8/support-files/mysql.server /etc/init.d/mysqld
sudo chmod 777 /etc/init.d/mysqld
chkconfig --list mysqld # 检查自启动项列表中没有mysqld
chkconfig --add mysqld # 如果没有就添加mysqld
chkconfig mysqld on # 设置开机启动
service mysqld start #启动测试
5、启动服务报错解决:
- 错误1:
[root@tomcatCloud-2 system]# systemctl start mysqld.service
Job for mysqld.service failed because the control process exited with error code.
See "systemctl status mysqld.service" and "journalctl -xe" for details.
[root@tomcatCloud-2 system]# systemctl status mysqld.service
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Sun 2020-10-25 16:52:31 CST; 14s ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Process: 2239 ExecStart=/opt/softs/mysql/mysql8/bin/mysqld --defaults-file=/etc/my.cnf $MYSQLD_OPTS (code=exited, status=1/FAILURE)
Main PID: 2239 (code=exited, status=1/FAILURE)
Status: "Server startup in progress"
Error: 2 (没有那个文件或目录)
10月 25 16:52:31 tomcatCloud-2 mysqld[2239]: 2020-10-25T08:52:31.794624Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
10月 25 16:52:31 tomcatCloud-2 mysqld[2239]: 2020-10-25T08:52:31.794724Z 1 [ERROR] [MY-012271] [InnoDB] The innodb_system data file 'ibdata1' must be writable
10月 25 16:52:31 tomcatCloud-2 mysqld[2239]: 2020-10-25T08:52:31.794763Z 1 [ERROR] [MY-012278] [InnoDB] The innodb_system data file 'ibdata1' must be writable
10月 25 16:52:31 tomcatCloud-2 mysqld[2239]: 2020-10-25T08:52:31.794801Z 1 [ERROR] [MY-010334] [Server] Failed to initialize DD Storage Engine
10月 25 16:52:31 tomcatCloud-2 mysqld[2239]: 2020-10-25T08:52:31.794921Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
10月 25 16:52:31 tomcatCloud-2 mysqld[2239]: 2020-10-25T08:52:31.794992Z 0 [ERROR] [MY-010119] [Server] Aborting
10月 25 16:52:31 tomcatCloud-2 mysqld[2239]: 2020-10-25T08:52:31.795446Z 0 [System] [MY-010910] [Server] /opt/softs/mysql/mysql8/bin/mysqld: Shutdown complete (mysqld 8.>
10月 25 16:52:31 tomcatCloud-2 systemd[1]: mysqld.service: Main process exited, code=exited, status=1/FAILURE
10月 25 16:52:31 tomcatCloud-2 systemd[1]: mysqld.service: Failed with result 'exit-code'.
10月 25 16:52:31 tomcatCloud-2 systemd[1]: Failed to start MySQL Server.
- 解决方法 :
上面的错误点 :The innodb_system data file ‘ibdata1’ must be writable;
就是 文件ibdata1(在//opt/softs/mysql/mysql8/data目录里)没有写入权限
# 就是给ibdata1 添加权限
chmod -R 777 /opt/softs/mysql/mysql8
- 错误2:
[root@centos701 mysql]# mysql -u root -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
- 解决方法 :
[root@centos701 mysql]# ln -s /opt/softs/mysql/mysql8/data/mysql.sock /tmp/mysql.sock