Openeuler 2203 源码安装 mysql8.0


目录:

1. 下载

官网下载最新的源码包:

2. 安装

2.1 创建用户

为了方便数据库管理,对于安装的 MySQL 数据库,生产上我们都会建立一个 mysql 用户和 mysql 用户组:

# 添加mysql用户组
groupadd mysql

# 添加mysql用户
useradd -g mysql mysql -d /home/mysql

# 修改mysql用户的登陆密码
passwd mysql
2.2 解压缩

在 / usr/local / 中解压压缩包,并改名为 mysql

cd /usr/local/src

tar xvf mysql-8.0.32-linux-glibc2.12-x86_64.tar.xz

# 改名为mysql
mv mysql-8.0.32-linux-glibc2.12-x86_64 /usr/local/mysql

并赋予用户读写权限(此处也可以换位你的用户)

chown -R mysql:mysql /usr/local/mysql/
2.3 创建配置文件
vim /etc/my.cnf
[mysqld]

datadir=/data/mysql
socket=/tmp/mysql.sock
log_error=/data/mysql/mysqld.log
pid_file=/data/mysql/mysqld.pid

character_set_server=utf8    # 修改数据库级字符集
init_connect='SET NAMES utf8'    # 普通用户连接时隐式执行"SET NAMES utf8"命令设置客户端的编码
max_connections=60000    # 设置最大连接数
open_files_limit=65535    # 设置能够打开的操作系统文件描述符最大数

innodb_buffer_pool_size=48G  # 设置缓存池大小建议为服务器内存的75%
innodb_write_io_threads=32  # 设置写线程个数与服务器核数一致
innodb_read_io_threads=32   # 设置读线程个数与服务器核数一致
skip_name_resolve=1    # 不对客户端连接进行DNS反向解析
interactive_timeout=3600    # MySQL服务器关闭交互式连接MySQL客户端连接前等待的秒数
wait_timeout=3600    # MySQL服务器关闭非交互连接jdbc等程序连接之前等待的秒数
max_allowed_packet=10M    # 一次传输数据包的过程中允许的最大数据包大小
thread_stack=512k    # 每个连接线程被创建时MySQL给它分配的内存大小

# binlog相关配置
server_id=1    # 服务标识不能与其他数据库id重复
log_slave_updates=1    # 作为从库时将从主库复制的数据也计入binlog级联同步时必须配置)(因为会记录server-id所以主主同步时开启此选项并不会环
expire_logs_days=14    # binlog保留时间14天
max_binlog_size=512M    # 单个binlog文件最大512M
binlog_format=MIXED    # 日志的记录格式
log_bin=mysql-bin    # binlog文件日志名
log_timestamps='system'  # 日志内记录时间戳使用系统时间
#slave-skip-errors=1032,1062,1007,1146    # 跳过主从复制中遇到的指定类型的错误

slave_parallel_workers=8    # 开启多线程并发复制并指定线程数减少从库复制延迟
slave_parallel_type=LOGICAL_CLOCK    # 选择并发复制方式
slave_preserve_commit_order=1    # 保证从库回放relaylog事务的顺序与主库完全相同

# 以下两项配置即将废弃
master_info_repository=TABLE    # 作为从库时将主库状态和连接信息记录到mysql.slave_master_info表若配置为FILE则以文件的形式保存在磁盘数据目录中
relay_log_info_repository=TABLE    # 作为从库时将其在中继日志中的位置记录到系统数据库中的mysql.slave_relay_log_info表若配置为FILE则保存到磁盘

# 慢日志相关配置
slow_query_log=1    # 开启慢日志
long_query_time=3    # 设置慢日志阈值时间
slow_query_log_file=/data/mysql/mysqld-slow.log    # 指定慢日志文件

default_authentication_plugin=mysql_native_password    # 修改密码认证插件以兼容老版本客户端
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
2.4 初始化文件
  1. 初始化 log 文件,防止没有权限。
#手动编辑一下日志文件,什么也不用写,直接保存退出
mkdir /data/mysql/


vim /data/mysql/mysqld.log
:wq

chmod 777 /data/mysql/mysqld.log
chown mysql.mysql -R /data/mysql/
  1. 初始化数据目录,防止没有权限。
# 创建数据目录
mkdir -p /data/mysql/data
chown -R mysql:mysql /data/mysql
  1. 初始化数据库
# 初始化数据库,并指定启动mysql的用户,否则就会在启动MySQL时出现权限不足的问题
/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql8.0 --datadir=/data/mysql/data

初始化完成后,在my.cnf中配置的datadir目录(/var/log/mysqld.log)下生成一个error.log文件,里面记录了root用户的随机密码。

cat /data/mysql/mysqld.log

执行后记录最后一点:root@localhost: xxxxx 。 这里的xxxxx就是初始密码。

2.5 启动数据库

启动数据库

#源目录启动:
/usr/local/mysql/support-files/mysql.server start

并设置开机自启动服务:

# 复制启动脚本到资源目录
cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld

# 增加mysqld服务控制脚本执行权限
chmod +x /etc/rc.d/init.d/mysqld

# 将mysqld服务加入到系统服务
chkconfig --add mysqld

# 检查mysqld服务是否已经生效
chkconfig --list mysqld

# 启动mysql,或者稍后下一步再启动。
systemctl start mysqld
systemctl enable mysqld

从此就可以使用 systemd 命令启动 / 停止服务:

systemctl start/stop/restart mysqld
2.6 配置环境变量

为了更好的操作 mysql,配置环境变量。

vim /root/.bash_profile
export PATH=$PATH:/usr/local/mysql/bin

# 立即生效
source /root/.bash_profile

# openeuler中的libtinfo版本升级了,需要重新创建软链
cd /usr/lib64
ls libtinfo*
# libtinfo.so.6  libtinfo.so.6.3
ln -s /usr/lib64/libtinfo.so.6.3 /usr/lib64/libtinfo.so.5
2.7 登录,修改密码

必须修改初始的随机密码:

# 登陆mysql的root用户
mysql -uroot -p
# 输入2.4生成的 随机密码

# 修改root用户密码为123456
alter user 'root'@'localhost' identified by 'Sjfy@2023';
flush privileges

3 使用 mysql

3.1 用户建立

以下命令只需要改动 用户名 和密码:

create user '用户名'@'%' identified by '密码';
grant all privileges on *.* to '用户名'@'%' with grant option;
flush privileges;

其中通配符 % 表示让该用户可以从任意远程主机登陆。

3.2 创建数据库

登陆用户后:

# 查询现有的数据库:
show databases;

# 创建
CREATE DATABASE 数据库名;

# 进入数据库:
use 数据库名;

# 查看所有的表
show tables;

# 退出:
exit