Mysql8.4.3LTS中離線部署的實現(xiàn)示例
一、部署環(huán)境
軟件:mysql8.4.3LTS
系統(tǒng):ubuntu24.04
資源配置
資源分配的大小與業(yè)務(wù)系統(tǒng)的體量有關(guān)系;所以沒有固定
CPU: 2核
內(nèi)存: 4 GB
磁盤: 50 GB sda[系統(tǒng)盤] 50GB, 默認分區(qū)
sdc[數(shù)據(jù)盤] 100GB 掛載點 /dcdata
二、下載地址
MySQL :: Download MySQL Community Server

版本選擇
由于我的操作系統(tǒng)比較新, 通過 ldd --version 命令查看glibc版本為2.39,所以選擇了 glibc 2.28的版本
**注:**如果操作系統(tǒng)支持的話還是選擇新的;但是考慮兼容性和維護性,我個人的部署腳本中目前選擇的還是glibc2.17的包;
演示使用的是glibc2.28版本的包,后續(xù)我也將這個版本的Mysql部署到開發(fā)和測試環(huán)境中使用,組員一起體驗他的穩(wěn)定性和性能。
三、部署詳情
1. 上傳安裝包
將安裝包上傳到服務(wù)器中,使用root用戶安裝,上傳路徑
/root/mysql-8.4.3-linux-glibc2.28-x86_64.tar.xz

2. 解壓軟件包
安裝包上傳后,執(zhí)行解壓到/dcsm目錄下
# 新建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. 安裝mysql
3.3.1 創(chuàng)建mysql用戶與用戶組
查詢系統(tǒng)中是否存在mysql用戶
cat /etc/passwd | cut -f1 -d':' | grep -w "mysql" -c groupadd mysql && useradd -r -g mysql -s /bin/false mysql

3.3.2 授權(quán)安裝文件夾
# 創(chuàng)建相關(guān)文件夾 mkdir -p /dcdata/mysql/log && mkdir -p /dcdata/mysql/data && mkdir -p /dcdata/mysql/run && mkdir -p /dcdata/mysql/lib # 授權(quán) chown -R mysql:mysql /dcsm/mysql && chown -R mysql:mysql /dcdata/mysql

3.3.3 安裝libaio依賴 (坑)
這個依賴是和你操作系統(tǒng)版本有關(guān)系的;
ubuntu24.04 中關(guān)于libaio的坑
該系統(tǒng)在安裝后自帶libaio

雖然whereis搜不到libaio.so.1 這個文件; 但系統(tǒng)中確實安裝了 libaio;
這也是我后續(xù)初始化依然報錯的原因;解決辦法就是建立超鏈接,讓mysql在初始化的時候找到這個命令
ln -s /lib/x86_64-linux-gnu/libaio.so.1t64 /lib/x86_64-linux-gnu/libaio.so.1

這里介紹查找方法;
找一臺和你鏡像一樣,或者操作系統(tǒng)版本一樣的可以聯(lián)網(wǎng)的機器;
apt search libaio

去/var/cache/apt/archives/ 下找到這個離線deb包; 在離線環(huán)境下就可以直接dpkg -i 安裝這個依賴包了
注:如果不安裝此依賴,后續(xù)初始化mysql數(shù)據(jù)庫時會提示缺少此依賴,官網(wǎng)教程中也特意提到要安裝這個依賴。
3.3.4 初始化Mysql數(shù)據(jù)庫
cd /dcsm/mysql # 初始化 bin/mysqld --initialize --user=mysql --basedir=/dcsm/mysql --datadir=/dcdata/mysql/data --log-error=/dcdata/mysql/log/mysqld.log

注:這是ubuntu24.04 上的坑。系統(tǒng)的 libaio.so.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
[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 # 允許最大連接數(shù) max_connections=2000 # 關(guān)閉binlog日志 skip-log-bin [mysql] socket=/dcdata/mysql/lib/mysql.sock
3.3.6 配置環(huán)境變量
### 添加到系統(tǒng)服務(wù)中 cp /dcsm/mysql/support-files/mysql.server /etc/init.d/mysql && chmod +x /etc/init.d/mysql ### 配置到環(huán)境變量中 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
### 重新加載systemd的配置信息 systemctl daemon-reload systemctl start mysql

設(shè)置開機啟動
systemctl enable mysql
3.3.8 登錄mysql
獲取初始化密碼
grep 'temporary password' /dcdata/mysql/log/mysqld.log | awk '{print $NF}'

3.3.8.1 創(chuàng)建root
創(chuàng)建mysql賬號root,并設(shè)置密碼
mysql --connect-expired-password -uroot -p
然后輸入上述密碼;
連上mysql后,修改root密碼,
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,即可生效;
使用官方推薦方式
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
3.3.8.3 授權(quán)
use mysql; update user set host = '%' where user ='root'; flush privileges;
至此部署完成~
四、快速部署腳本
該腳本適用于快速部署使用,請注意安裝包版本與系統(tǒng)版本;
我用的是ubuntu24.04, mysql8.4.3tls
vim deploy_mysql.sh
#!/bin/bash
### 假設(shè)安裝包已上傳到/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
### 創(chuàng)建 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
### 授權(quán)安裝文件夾
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
# 允許最大連接數(shù)
max_connections=2000
# 關(guān)閉 binlog 日志
skip-log-bin
[mysql]
socket=/dcdata/mysql/lib/mysql.sock
EOF
### 配置環(huán)境變量
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
腳本授權(quán)
chmod +x deploy_mysql.sh
執(zhí)行部署
./deploy_mysql.sh

連接成功;

到此這篇關(guān)于Mysql8.4.3LTS中離線部署的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)Mysql8.4.3LTS 離線部署內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
CentOS 7中升級MySQL 5.7.23的坑與解決方法
我們在安裝升級的時候會遇到一些問題,不過可能每個人遇到的問題不一樣,多找找才能解決問題喲,下面這篇文章主要給大家介紹了關(guān)于在CentOS 7中升級MySQL 5.7.23遇到的一個坑與解決方法,需要的朋友可以參考下2018-10-10
Mysql中關(guān)于on,in,as,where的區(qū)別
這篇文章主要介紹了Mysql中關(guān)于on,in,as,where的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03

