1、安裝
1.1、下載
cd /usr/local/
在 /usr/local/
下執行,下載資源包,可以本地下載上傳
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.32-linux-glibc2.12-x86_64.tar.xz
1.2、解壓安裝
tar -Jxvf mysql-8.0.32-linux-glibc2.12-x86_64.tar.xz
2、配置工作
2.1、基本設置
2.1.1、文件夾重命名
重命名 MySQL 文件夾
mv mysql-8.0.32-linux-glibc2.12-x86_64 mysql8
2.1.2、PATH 變量
vim /etc/profile# 在最下面追加
export PATH=$PATH:/usr/local/mysql8/bin# 重載環境變量
source /etc/profile
2.1.3、確認安裝
mysql --version
如果有報錯:
Ubuntu 24.04 通常已經安裝了 libtinfo.so.6
,我們手動為舊程序創建一個兼容鏈接:
sudo ln -s /lib/x86_64-linux-gnu/libtinfo.so.6 /lib/x86_64-linux-gnu/libtinfo.so.5
這個命令會讓系統中的 libtinfo.so.5
“偽裝”為 libtinfo.so.6
,大多數老程序會正常運行。
?? 如果你不確定 libtinfo.so.6
是否存在,可以先執行:
ls /lib/x86_64-linux-gnu/libtinfo*
2.2、創建用戶組、用戶
注:需要進入 /usr/local
創建用戶組:groupadd
groupadd mysql
創建用戶:useradd
(-r
創建系統用戶,-g
指定用戶組)
useradd -r -g mysql mysql
2.3、數據目錄
創建目錄:
mkdir -p /data/mysql8_data
賦予權限:
更改屬主和數組
chown -R mysql:mysql /data/mysql8_data
更改模式 只有具有 root 權限的用戶和 mysql 用戶可以讀取、寫入和執行
chmod -R 700 /data/mysql8_data
3、初始化 & 啟動
3.1、配置文件
在 /usr/local/etc/
下創建 my.cnf
配置文件用于初始化 MySQL 數據庫
vim /usr/local/etc/my.cnf
[mysql]
# 默認字符集
default-character-set=utf8mb4[client]
# 客戶端使用的端口號
port=3306
# 客戶端連接的 socket 路徑
socket=/tmp/mysql.sock[mysqld]
# 服務端使用的端口號
port=3306
# 服務器 ID
server-id=3306
# MySQL 運行用戶
user=mysql
# 日志時間系統時間
log_timestamps=SYSTEM
# 默認時區東八區
default-time_zone='+8:00'
# 服務器連接的 socket 路徑
socket=/tmp/mysql.sock
# MySQL 安裝目錄
basedir=/usr/local/mysql8
# 數據存放目錄
datadir=/data/mysql8_data/mysql
# 開啟二進制日志功能
log-bin=/data/mysql8_data/mysql/mysql-bin
# InnoDB 數據文件存放目錄
innodb_data_home_dir=/data/mysql8_data/mysql
# InnoDB 日志文件存放目錄
innodb_log_group_home_dir=/data/mysql8_data/mysql
# MySQL 錯誤日志文件路徑
log-error=/data/mysql8_data/mysql/mysql.log
# 存放 MySQL 進程 ID 的文件路徑
pid-file=/data/mysql8_data/mysql/mysql.pid
# 表名大小寫不敏感
lower_case_table_names=1
# 服務端字符集
character-set-server=utf8mb4
# SQL 模式設置
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
# 自動提交所有事務
autocommit=1
# 跳過排它鎖定
skip-external-locking
# 鍵緩存大小
key_buffer_size=256M
# 允許的最大數據包大小
max_allowed_packet=1M
# 表緩存
table_open_cache=1024
# 排序緩存大小
sort_buffer_size=4M
# 網絡緩沖區長度
net_buffer_length=8K
# 讀取緩沖區大小
read_buffer_size=4M
# 隨機讀取緩沖區大小
read_rnd_buffer_size=512K
# MyISAM 排序緩沖區大小
myisam_sort_buffer_size=64M
# 線程緩存大小
thread_cache_size=128
# 臨時表大小
tmp_table_size=128M
# 啟用顯式默認時間戳
explicit_defaults_for_timestamp=true
# 最大連接數
max_connections=500
# 連接錯誤最大數量
max_connect_errors=100
# 打開文件限制
open_files_limit=65535
# 二進制日志格式
binlog_format=mixed
# 二進制日志過期時間(秒)
binlog_expire_logs_seconds=864000
# 創建表時使用的默認存儲引擎
default_storage_engine=InnoDB
# InnoDB 數據文件路徑設置
innodb_data_file_path=ibdata1:10M:autoextend
# InnoDB 緩沖池大小
innodb_buffer_pool_size=1024M
# InnoDB 日志文件大小
innodb_log_file_size=256M
# InnoDB 日志緩沖區大小
innodb_log_buffer_size=8M
# InnoDB 每次提交時刷新日志
innodb_flush_log_at_trx_commit=1
# InnoDB 加鎖等待超時時間(秒)
innodb_lock_wait_timeout=50
# 事務隔離級別為讀已提交
transaction-isolation=READ-COMMITTED[mysqldump]
# 快速導出數據
quick
# 允許的最大數據包大小
max_allowed_packet=16M[myisamchk]
# 鍵緩存大小
key_buffer_size=256M
# 排序緩沖區大小
sort_buffer_size=4M
# 讀取緩沖區大小
read_buffer=2M
# 寫入緩沖區大小
write_buffer=2M[mysqlhotcopy]
# 交互式超時時間
interactive-timeout
3.2、初始化
需要進入 /usr/local/mysql8/bin
,若添加了 PATH 變量可忽略。
初始化命令:注意文件夾名稱。
–defaults-file:指定配置文件(要放在–initialize 前面)
–user: 指定用戶
–basedir:指定安裝目錄
–datadir:指定初始化數據目錄
–intialize-insecure:初始化無密碼(否則生成隨機密碼)
mysqld --defaults-file=/usr/local/etc/my.cnf --basedir=/usr/local/mysql8 --datadir=/data/mysql8_data/mysql --user=mysql --initialize-insecure
可能會碰到問題
為兼容老程序,創建軟鏈接把 libaio.so.1
指向實際存在的 libaio.so.1t64
文件:
sudo ln -s /usr/lib/x86_64-linux-gnu/libaio.so.1t64 /usr/lib/x86_64-linux-gnu/libaio.so.1
然后,把這個鏈接再放到 MySQL 期望的路徑:
sudo ln -s /usr/lib/x86_64-linux-gnu/libaio.so.1 /lib/x86_64-linux-gnu/libaio.so.1
最后更新緩存:
sudo ldconfig
之后再嘗試啟動 MySQL:
mysqld --defaults-file=/usr/local/etc/my.cnf --basedir=/usr/local/mysql8 --datadir=/data/mysql8_data/mysql --user=mysql --initialize-insecure
這樣做是利用 libaio.so.1t64
來代替舊的 libaio.so.1
,適配 Ubuntu 24.04 這種新架構。
3.3、啟動 MySQL
查看 MySQL 的 /bin
下是否包含 mysqld_safe
用于后臺安全啟動 MySQL
3.3.1、啟動服務
安全后臺啟動 MySQL
# 完整命令
/usr/local/mysql8/bin/mysqld_safe --defaults-file=/usr/local/etc/my.cnf &
# 若添加了PATH變量,可省略如下
mysqld_safe --defaults-file=/usr/local/etc/my.cnf &
確認啟動:第二條即 MySQL 服務。
ps -ef|grep mysql
3.3.2、登錄
mysql -u root --skip-password
3.4、修改密碼
# 修改密碼
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密碼';# 設置密碼永不過期(本地)
alter user 'root'@'localhost' password expire never;# 刷新權限
FLUSH PRIVILEGES;
4、遠程連接 MySQL
4.1、創建遠程連接用戶
-- 選擇 mysql 數據庫,查看當前用戶
USE mysql;-- host 字段表示可訪問當前數據庫的主機,目前僅本地可訪問。
SELECT user,host,plugin,authentication_string FROM user;-- 創建用戶
CREATE user 'root'@'%';-- 設置首次密碼
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '密碼';-- 授權用戶所有權限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';-- 設置密碼永不過期(遠程)
alter user 'root'@'%' password expire never;-- 刷新權限
FLUSH PRIVILEGES;