Ubuntu24 二進位制包安裝mysql5.7

wuworker發表於2024-09-17

目錄
  • 下載mysql
  • 新增使用者和使用者組
  • 建立mysql-files檔案
  • 執行initialize
  • 建立配置檔案
  • 啟動mysql
  • 生成systemd配置
  • 修改root密碼
  • 新增使用者,允許從遠端訪問
  • 遇到問題
    • 執行initialize 時報錯:找不到libaio.so.1包
    • mysql拒絕使用root使用者啟動
    • mysql啟動沒成功,且沒報錯
    • mysql啟動失敗:unknown validate_password_policy
    • mysql客戶端報錯:libncurses.so.5,libtinfo.so.5

下載mysql

mysql官方下載地址:https://downloads.mysql.com/archives/community/

安裝可以參考官方文件:https://dev.mysql.com/doc/refman/5.7/en/binary-installation.html

我選的是Linux-Generic的壓縮包安裝方式

下載完上傳到伺服器,解壓到安裝目錄(我這裡為/usr/local/mysql-5.7)

➜  cd /usr/local
➜  tar -zxvf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz
➜  mv mysql-5.7.44-linux-glibc2.12-x86_64 mysql-5.7

新增使用者和使用者組

官網命令

$> groupadd mysql
$> useradd -r -g mysql -s /bin/false mysql

建立mysql-files檔案

官網命令

$> cd mysql-5.7
$> mkdir mysql-files
$> chown mysql:mysql mysql-files
$> chmod 750 mysql-files

執行initialize

進入mysql-5.7目錄

./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql-5.7 --datadir=/usr/local/mysql-5.7/data

這裡可能會報錯:libaio.so.1的問題,參考下面執行initialize 時報錯的問題

初始化完成後,會輸出密碼,需要記錄

建立ssl證書,使用ssl連線

./bin/mysql_ssl_rsa_setup --basedir=/usr/local/mysql-5.7 --datadir=/usr/local/mysql-5.7/data

建立配置檔案

建立配置檔案:/etc/my.cnf

開發參考:

[mysqld]  
port=3306  
character-set-server=utf8  
collation-server=utf8_general_ci  
default-storage-engine=INNODB  
  
# Only allow connections from localhost  
bind-address = 0.0.0.0  
  
#sql_mode="ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
sql_mode="STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

max_connections=100
#skip-name-resolve

basedir=/usr/local/mysql-5.7
datadir=/usr/local/mysql-5.7/data
socket=/tmp/mysql.sock

#日誌
#日誌時間,預設是UTC
log_timestamps=SYSTEM  
#錯誤日誌
log_error=/usr/local/var/log/mysql/error.log
#開啟二進位制日誌
log-bin=/usr/local/var/log/mysql/mysql-bin
server-id=1
#開啟通用查詢日誌
#general_log=ON
#general_log_file=/usr/local/var/log/mysql/mysql-query.log
#慢查詢日誌
slow_query_log=ON
slow_query_log_file=/usr/local/var/log/mysql/mysql-slow.log
long_query_time=1
#記錄不使用索引查詢的語句
log_queries_not_using_indexes=ON

#修改密碼校驗等級
plugin-load-add=validate_password.so
validate-password=FORCE_PLUS_PERMANENT
validate_password_policy=0
validate_password_length=4

#設定匯入匯出的安全目錄
secure_file_priv=""

[mysql]
default-character-set=utf8
auto-rehash

[client]
port=3306

其中log_error檔案需要事先建立,同時注意檔案許可權為mysql

啟動mysql

./bin/mysqld_safe --user=mysql &

啟動可能會失敗,日誌在my.cnf的log_error配置的檔案裡,可以找失敗原因

生成systemd配置

參考:https://zhuanlan.zhihu.com/p/692930530

在/usr/lib/systemd/system目錄下,建立mysql.service檔案,寫入

[Unit]
Description=MySQL Server
Documentation=man:mysqld
Documentation=https://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql-5.7/bin/mysqld_safe
LimitNOFILE = 5000

啟動路徑按自己的修改既可,之後可以使用systemctl管理mysql

systemctl start mysql

修改root密碼

mysql -uroot -p

ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';

只是自己測試,為了方便設定為123456。簡單密碼需要提前配置validate_password_policy

新增使用者,允許從遠端訪問

預設root只能從本地訪問,新增一個使用者,方便本地開發,進行遠端訪問

create user wxl@'%' identified by '123456';
grant all on *.* to wxl@'%';

賦予任意資料庫,任意表的所有許可權

遇到問題

執行initialize 時報錯:找不到libaio.so.1包

mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory

原因是mysql找不到libaio.so.1包

先執行

➜  ~ apt install libaio1

之後再次安裝,依然報錯。參考:https://deb.sipwise.com/debian/pool/main/liba/libaio/

手動安裝deb包,檔案:libaio1_0.3.113-4_amd64.deb

下載地址:https://deb.sipwise.com/debian/pool/main/liba/libaio/

下載後執行:apt install ./libaio1_0.3.113-4_amd64.deb

問題解決

mysql拒絕使用root使用者啟動

使用mysqld啟動,提示Please read “Security“ section of the manual to find out how to run mysqld as root!

這是mysql的安全策略,不能使用root使用者啟動。改為mysqld_safe啟動

./bin/mysqld_safe --user=mysql &

mysql啟動沒成功,且沒報錯

檢視/etc/myt.cnf裡log_error的配置,裡面有失敗原因

log_error=/usr/local/var/log/mysql/error.log

mysql啟動失敗:unknown validate_password_policy

error.log提示:[ERROR] unknown variable 'validate_password_policy=0'

如果設定了validate_password_policy引數,my.cnf配置裡需要加上

plugin-load-add=validate_password.so
validate-password=FORCE_PLUS_PERMANENT

mysql客戶端報錯:libncurses.so.5,libtinfo.so.5

這是由於系統安裝的版本過高。透過建立軟連線方式解決

檢視自己系統下對應的版本,建立軟連線

ln -s /usr/lib/x86_64-linux-gnu/libncurses.so.6.4 /usr/lib/x86_64-linux-gnu/libncurses.so.5
ln -s /usr/lib/x86_64-linux-gnu/libtinfo.so.6.4 /usr/lib/x86_64-linux-gnu/libtinfo.so.5

相關文章