软件:mysql8.4.3LTS
系统:ubuntu24.04
资源分配的大小与业务系统的体量有关系;所以没有固定
CPU: 2核
内存: 4 GB
磁盘: 50 GB sda[系统盘] 50GB, 默认分区
sdc[数据盘] 100GB 挂载点 /dcdata
MySQL :: Download MySQL Community Server
由于我的操作系统比较新, 通过 ldd --version 命令查看glibc版本为2.39,所以选择了 glibc 2.28的版本
**注:**如果操作系统支持的话还是选择新的;但是考虑兼容性和维护性,我个人的部署脚本中目前选择的还是glibc2.17的包;
演示使用的是glibc2.28版本的包,后续我也将这个版本的Mysql部署到开发和测试环境中使用,组员一起体验他的稳定性和性能。
将安装包上传到服务器中,使用root用户安装,上传路径
1 |
/root/mysql-8.4.3-linux-glibc2.28-x86_64.tar.xz |
安装包上传后,执行解压到/dcsm目录下
1 2 3 4 |
# 新建dcsm文件夹 mkdir /dcsm tar -xvf /root/mysql-8.4.3-linux-glibc2.28-x86_64.tar.xz -C /dcsm cd /dcsm && mv mysql-8.4.3-linux-glibc2.28-x86_64/ mysql |
3.3.1 创建mysql用户与用户组
查询系统中是否存在mysql用户
1 2 3 |
cat /etc/passwd | cut -f1 -d':' | grep -w "mysql" -c
groupadd mysql && useradd -r -g mysql -s /bin/false mysql |
3.3.2 授权安装文件夹
1 2 3 4 5 |
# 创建相关文件夹 mkdir -p /dcdata/mysql/log && mkdir -p /dcdata/mysql/data && mkdir -p /dcdata/mysql/run && mkdir -p /dcdata/mysql/lib
# 授权 chown -R mysql:mysql /dcsm/mysql && chown -R mysql:mysql /dcdata/mysql |
3.3.3 安装libaio依赖 (坑)
这个依赖是和你操作系统版本有关系的;
该系统在安装后自带libaio
虽然whereis搜不到libaio.so.1 这个文件; 但系统中确实安装了 libaio;
这也是我后续初始化依然报错的原因;解决办法就是建立超链接,让mysql在初始化的时候找到这个命令
1 |
ln -s /lib/x86_64-linux-gnu/libaio.so.1t64 /lib/x86_64-linux-gnu/libaio.so.1 |
这里介绍查找方法;
找一台和你镜像一样,或者操作系统版本一样的可以联网的机器;
apt search libaio
去/var/cache/apt/archives/ 下找到这个离线deb包; 在离线环境下就可以直接dpkg -i 安装这个依赖包了
注:如果不安装此依赖,后续初始化mysql数据库时会提示缺少此依赖,官网教程中也特意提到要安装这个依赖。
3.3.4 初始化Mysql数据库
1 2 3 4 |
cd /dcsm/mysql
# 初始化 bin/mysqld --initialize --user=mysql --basedir=/dcsm/mysql --datadir=/dcdata/mysql/data --log-error=/dcdata/mysql/log/mysqld.log |
注:这是ubuntu24.04 上的坑。系统的 libaio.so.1 软连接的地址不存在;
解决方法就是重新建立一个软链接
1 |
ln -s /lib/x86_64-linux-gnu/libaio.so.1t64 /lib/x86_64-linux-gnu/libaio.so.1 |
3.3.5 编辑my.cnf
/etc/my.cnf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
[mysqld] # cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. #innodb_buffer_pool_size = 128M # join_buffer_size = 128M # sort_buffer_size = 2M # read_rnd_buffer_size = 2M basedir=/dcsm/mysql datadir=/dcdata/mysql/data socket=/dcdata/mysql/lib/mysql.sock port=3306 log-error=/dcdata/mysql/log/mysqld.log pid-file=/dcdata/mysql/run/mysqld.pid
# 开启远程,类似dblink federated log_bin_trust_function_creators=1 # 时间跟随本地 log_timestamps=system # 允许最大连接数 max_connections=2000 # 关闭binlog日志 skip-log-bin
[mysql] socket=/dcdata/mysql/lib/mysql.sock |
3.3.6 配置环境变量
1 2 3 4 5 6 7 8 |
### 添加到系统服务中 cp /dcsm/mysql/support-files/mysql.server /etc/init.d/mysql && chmod +x /etc/init.d/mysql
### 配置到环境变量中 echo "/dcsm/mysql/lib" >>/etc/ld.so.conf && echo "#MYSQL ENVIRONMENT" >>/etc/profile && echo "export PATH=/dcsm/mysql/bin:/dcsm/mysql/lib:\$PATH" >>/etc/profile && source /etc/profile |
3.3.7 启动mysql
1 2 3 |
### 重新加载systemd的配置信息 systemctl daemon-reload systemctl start mysql |
设置开机启动
1 |
systemctl enable mysql |
3.3.8 登录mysql
获取初始化密码
1 |
grep 'temporary password' /dcdata/mysql/log/mysqld.log | awk '{print $NF}' |
3.3.8.1 创建root
创建mysql账号root,并设置密码
1 |
mysql --connect-expired-password -uroot -p |
然后输入上述密码;
连上mysql后,修改root密码,
1 |
ALTER USER ‘root'@‘localhost' IDENTIFIED WITH mysql_native_password BY ‘MyNewPass'; |
原因参考:[MySQL8.0.34 开始被弃用mysql_native_password插件](https://dev.mysql.com/doc/refman/8.4/en/native-pluggable-authentication.html#:~:text=MySQL client programs in MySQL 8.4 (and later),what is desired%2C like this%3A %24> mysql --default-auth%3Dmysql_native_password)
3.3.8.2 Plugin ‘mysql_native_password’ is not load 两种解决办法
重新启动该插件(不推荐)
具体做法就是修改my.cnf 文件
重启mysql,即可生效;
使用官方推荐方式
1 |
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password'; |
3.3.8.3 授权
1 |
use mysql; update user set host = '%' where user ='root'; flush privileges; |
至此部署完成~
该脚本适用于快速部署使用,请注意安装包版本与系统版本;
我用的是ubuntu24.04, mysql8.4.3tls
vim deploy_mysql.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
#!/bin/bash
### 假设安装包已上传到/root下
### 解压软件包 mkdir /dcsm tar -xvf /root/mysql-8.4.3-linux-glibc2.28-x86_64.tar.xz -C /dcsm cd /dcsm && mv mysql-8.4.3-linux-glibc2.28-x86_64/ mysql
### 创建 mysql 用户与用户组 if [ $(cat /etc/passwd | cut -f1 -d':' | grep -w "mysql" -c) -eq 0 ]; then groupadd mysql && useradd -r -g mysql -s /bin/false mysql fi
### 授权安装文件夹 mkdir -p /dcdata/mysql/log && mkdir -p /dcdata/mysql/data && mkdir -p /dcdata/mysql/run && mkdir -p /dcdata/mysql/lib chown -R mysql:mysql /dcsm/mysql && chown -R mysql:mysql /dcdata/mysql
### 建立软链接 ln -s /lib/x86_64-linux-gnu/libaio.so.1t64 /lib/x86_64-linux-gnu/libaio.so.1
### 初始化 Mysql cd /dcsm/mysql
bin/mysqld --initialize --user=mysql --basedir=/dcsm/mysql --datadir=/dcdata/mysql/data --log-error=/dcdata/mysql/log/mysqld.log
# 3.3.5 编辑 my.cnf cat <<EOF > /etc/my.cnf [mysqld] # cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. #innodb_buffer_pool_size = 128M # join_buffer_size = 128M # sort_buffer_size = 2M # read_rnd_buffer_size = 2M basedir=/dcsm/mysql datadir=/dcdata/mysql/data socket=/dcdata/mysql/lib/mysql.sock port=3306 log-error=/dcdata/mysql/log/mysqld.log pid-file=/dcdata/mysql/run/mysqld.pid
# 开启远程,类似 dblink federated log_bin_trust_function_creators=1 # 时间跟随本地 log_timestamps=system # 允许最大连接数 max_connections=2000 # 关闭 binlog 日志 skip-log-bin
[mysql] socket=/dcdata/mysql/lib/mysql.sock EOF
### 配置环境变量 cp /dcsm/mysql/support-files/mysql.server /etc/init.d/mysql && chmod +x /etc/init.d/mysql echo "/dcsm/mysql/lib" >>/etc/ld.so.conf echo "#MYSQL ENVIRONMENT" >>/etc/profile echo "export PATH=/dcsm/mysql/bin:/dcsm/mysql/lib:\$PATH" >>/etc/profile source /etc/profile
### 启动 mysql systemctl daemon-reload systemctl start mysql systemctl enable mysql
### mysql修改密码 并允许远程 initial_password=$(grep 'temporary password' /dcdata/mysql/log/mysqld.log | awk '{print $NF}') mysql --connect-expired-password -uroot -p"$initial_password" <<EOF ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password'; use mysql; update user set host = '%' where user ='root'; flush privileges; EOF
source /etc/profile |
脚本授权
1 |
chmod +x deploy_mysql.sh |
执行部署
1 |
./deploy_mysql.sh |
连接成功;