1、背景與問題說明
? ? ? ??因mysql-5.2.27版本存在安全漏洞問題,為保障系統安全,需將處于生產環境的麒麟v10 ARM64架構系統服務器上當前部署的mysql-5.7.27版本升級到mysql-8.4.4,以規避潛在風險,提升系統整體的安全性和穩定性。
1.1? 本地麒麟虛擬環境搭建的容易遇到的問題
????????在Windows 11上部署基于麒麟ARM64架構系統的虛擬環境面臨多重挑戰與易發問題。首要難點在于硬件兼容性與虛擬化技術的適配。Windows 11原生支持Intel和AMD的x64架構,而麒麟操作系統基于ARM64架構,這要求虛擬化軟件必須具備出色的跨架構模擬能力。
????????實際操作中,用戶可能會遇到虛擬化軟件不支持或不完全支持ARM64指令集的情況,導致系統無法啟動或運行緩慢。此外,驅動兼容性問題也不容忽視,部分麒麟系統特有的硬件驅動在Windows 11的虛擬化環境中可能無法正常工作,影響系統性能與功能。
????????同時,由于兩種系統架構的本質差異,文件共享、網絡配置等也可能成為部署過程中的棘手問題,需要用戶具備較高的技術水平和耐心進行調試與優化。
1.2 虛擬機選擇
????????在Win11上部署麒麟ARM64架構系統的虛擬環境時,應選擇能夠支持ARM架構模擬的虛擬機工具。推薦使用QEMU虛擬機工具,理由如下:
- 跨架構模擬能力強:QEMU是一款開源的虛擬機模擬器,能夠模擬多種硬件平臺,包括ARM架構,因此可以滿足在Win11上部署麒麟ARM64系統的需求。
- 功能全面:QEMU提供了豐富的配置選項和工具,如qemu-img用于處理磁盤映像文件,方便用戶根據需求進行自定義設置和優化。
- 社區支持廣泛:QEMU擁有龐大的用戶社區和豐富的文檔資源,用戶在遇到問題時可以更容易地尋求幫助和解決方案。
2、工具準備
2.1、開源模擬處理器-QEMU
????????QEMU 是一套由 Fabrice Bellard 所編寫的模擬處理器的自由軟件。它與 Bochs,PearPC 近似,但其具有某些后兩者所不具備的特性,如高速度及跨平臺的特性。經由 kqemu 這個開源的加速器,QEMU 能模擬至接近真實電腦的速度。QEMU 有兩種主要運作模傾:
- User mode 模擬模式,亦即是使用者模式。QEMU 能啟動那些為不同中央處理器編譯的 Linux 程序。而 Wine 及 Dosemu 是其主要目標。
- System mode 模擬模式,亦即是系統模式。QEMU 能模擬整個電腦系統,包括中央處理器及其他周邊設備。它使得為系統源代碼進行測試及除錯工作變得容易。其亦能用來在一部主機上虛擬數部不同虛擬電腦。
????????QEMU 的主體部份是在 LGPL 下發布的,而其系統模式模擬與 kqemu 加速器則是在 GPL 下發布。使用 kqemu 可使 QEMU 能模擬至接近實機速度,但其在虛擬的操作系統是 Microsoft Windows 98 或以下的情況下是無用的。
優點:
- 可以模擬 IA-32 (x86) 個人電腦,AMD64 個人電腦, MIPS R4000, 升陽的 SPARC sun3 與 PowerPC (PReP 及 Power Macintosh) 架構
- 支持其他架構,不論在主機或虛擬系統上 (請參看 QEMU 主頁以獲取完整的清單)
- 增加了模擬速度,某些程式甚至可以實時運行
- 可以在其他平臺上運行 Linux 的程式
- 可以儲存及還原運行狀態 (如運行中的程式)
- 可以虛擬網絡卡
- 可模擬多 CPU
? QEMU官網:QEMU
2.2 windows11安裝QEMU
2.2.1 下載QEMU
下載地址:QEMU for Windows – Installers (64 bit)
2.2.2?安裝QEMU
?1 找到下載的QEMU軟件,雙擊開始安裝
? 2? 安裝簡單、語言選擇English,一路next
3? 配置系統環境變量
4 查看QEMU軟件版本
qemu-img --version
qemu-system-x86_64 --version
至此QEMU安裝完成。
2.3 麒麟v10 ARM64架構系統
2.3.1 為什么選擇銀河麒麟高級服務器操作系統
2.3.2? 麒麟v10 ARM64系統下載
?版本1? ?Kylin-Server-V10-SP3-2403-Release-20240426-arm64?
https://iso.kylinos.cn/web_pungi/download/cdn/ni3tIfZoEKLDglszRXvh9WymuwOT5r6M/Kylin-Server-V10-SP3-2403-Release-20240426-arm64.iso
版本2? ?Kylin-Server-10-SP2-aarch64-Release-Build09-20210524
https://pan.baidu.com/s/1p8HviWKcVZSOhNaCQ1XYtg?pwd=g3u2
2.3.3 安裝前準備
1 需要一個EFI工具
EFI(Extensible Firmware Interface)?是一種用于計算機的固件接口,旨在替代傳統的 BIOS(基本輸入/輸出系統)。
EFI文件下載:
https://releases.linaro.org/components/kernel/uefi-linaro/16.02/release/qemu64/
2、把下載的文件copy至規劃安裝的文件夾中,如下圖:
2.3.4 安裝
1 規劃安裝的文件夾的地址欄中輸入cmd,如下圖:
點擊回車鍵,彈出如下圖:
2.3.4.1? ?創建虛擬磁盤?
在cmd命令窗口輸入創建虛擬磁盤的命令:
##相對路徑
qemu-img create -f qcow2 kylin_arm64.img 60g
或
qemu-img create -f qcow2 kylin_arm64.qcow2 60g##絕對路徑
qemu-img create -f qcow2 E:\QemuVM\kylin10-arm64\kylin_arm64.img 60g
或
qemu-img create -f qcow2 E:\QemuVM\kylin10-arm64\kylin_arm64.qcow2 60g
然后會在E:\QemuVM\kylin10-arm64文件夾中生成一個文件:kylin_arm64.img
kylin_arm64.img作為一個虛擬磁盤介質,磁盤容量最大為60G。
文件目錄結構,如下圖:
qcow2 鏡像格式是 QEMU 模擬器支持的一種磁盤鏡像。它也是可以用一個文件的形式來表示一塊固定大小的塊設備磁盤。與普通的 raw 格式的鏡像相比,有以下特性:
- 更小的空間占用,即使文件系統不支持空洞(holes);
- 支持寫時拷貝(COW, copy-on-write),鏡像文件只反映底層磁盤的變化;
- 支持快照(snapshot),鏡像文件能夠包含多個快照的歷史;
- 可選擇基于 zlib 的壓縮方式
- 可以選擇 AES 加密
2.3.4.2? 安裝操作系統
在cmd命令窗口輸入安裝操作系統的命令:
qemu-system-aarch64.exe -m 8192 -cpu cortex-a72 -smp 4,cores=4,threads=1,sockets=1 -M virt -bios E:\QemuVM\kylin10-arm64\QEMU_EFI.fd -netdev user,id=net0 -device virtio-net-pci,netdev=net0 -device nec-usb-xhci -device usb-kbd -device usb-mouse -device VGA -drive if=none,file=E:\QemuVM\kylin10-arm64\Kylin-Server-V10-SP3-2403-Release-20240426-arm64.iso,id=cdrom,media=cdrom -device virtio-scsi-device -device scsi-cd,drive=cdrom -drive if=none,file=E:\QemuVM\kylin10-arm64\kylin_arm64.img,id=hd0 -device virtio-blk-device,drive=hd0
參數解釋
- qemu-system-aarch64.exe:指定要使用的 QEMU 模擬器,針對 ARM64 架構。
- m 8192:分配給虛擬機的內存大小,這里為 8192 MB(即 8 GB)。
- cpu cortex-a72:指定使用 Cortex-A72 作為虛擬 CPU 的型號,這是 ARM 體系結構的一種高性能處理器。
- smp 8,cores=4,threads=1,sockets=2:配置虛擬機的對稱多處理(SMP)設置:
- 8 表示總共有 8 個 CPU。
- cores=4 表示每個 CPU 只有 4 個核心。
- threads=1 表示每個核心只有 1 個線程。
- sockets=2 表示只有 2 個 CPU 插槽。
- M virt:指定虛擬機的機器類型,這里使用的是通用的 Virt 虛擬機類型。
- bios E:\QemuVM\kylin10-arm64\QEMU_EFI.fd:指定要使用的 BIOS 固件文件,這里使用的是 UEFI 固件,文件路徑為 E:\QemuVM\kylin10-arm64\QEMU_EFI.fd。
- net nic:創建一個網絡接口卡(NIC)。
- net tap,ifname=tap0:配置網絡以使用 TAP 設備 tap0,允許虛擬機通過此設備連接到主機的網絡。
- device nec-usb-xhci:添加 NEC USB 3.0 控制器設備。
- device usb-kbd:添加 USB 鍵盤設備。
- device usb-mouse:添加 USB 鼠標設備。
- device VGA:添加 VGA 圖形適配器設備,用于顯示輸出。
- drive if=none,file=E:\QemuVM\kylin10-arm64\Kylin-Server-V10-SP3-2403-Release-20240426-arm64.iso,id=cdrom,media=cdrom:指定一個光盤驅動器,使用 ISO 文件作為介質。
- if=none 表示沒有指定接口類型。
- file=E:\QemuVM\kylin10-arm64\Kylin-Server-V10-SP3-2403-Release-20240426-arm64.iso 指定 ISO 文件的路徑。
- id=cdrom 為該設備指定一個 ID。
- media=cdrom 指定該驅動器為 CD-ROM 類型。
- device virtio-scsi-device:添加 VirtIO SCSI 控制器設備,用于管理存儲設備。
- device scsi-cd,drive=cdrom:將前面定義的 CD-ROM 設備連接到 SCSI 控制器。
- drive if=none,file=E:\QemuVM\kylin10-arm64\kylin_arm64.img,id=hd0:指定一個硬盤驅動器,使用鏡像文件作為存儲設備。
- file=E:\QemuVM\kylin10-arm64\kylin_arm64.img 指定鏡像文件的路徑。
- id=hd0 為該驅動器指定一個 ID。
- device virtio-blk-device,drive=hd0:將前面定義的硬盤驅動器連接到 VirtIO 塊設備控制器。
- netdev user,id=net0: 創建一個用戶模式網絡設備,
- ID 為 net0。這使得虛擬機可以訪問主機網絡。
- device virtio-net-pci,netdev=net0: 將一個 Virtio 網絡設備添加到虛擬機,使用之前定義的 net0 網絡設備。
- id=hd0: 給此硬盤驅動器一個 ID。
- device virtio-blk-device,drive=hd0: 將之前添加的硬盤驅動器作為 Virtio 塊設備。
輸入命令,回車后會彈出QEMU安裝kylin的窗口,如下圖:
選擇操作系統
會有一段時間黑屏,黑屏時間不定,應該和宿主機的配置有關系,黑屏過去后,顯示如下圖;
選擇語言,如下圖:
安裝配置,紅框標出必須配置,如下圖:
其他配置略,網絡配置,如下圖:
點擊開始安裝,如下圖:
安裝完成后,點擊重啟系統,如下圖:
等待一會,會有黑屏,耐心等待,黑屏過去后如下圖:
點擊進入許可證,勾選同意,點擊完成,如下圖:
返回初始設置頁面,點擊結束配置,如下圖:
然后會進入登錄界面,如下圖
輸入賬號和密碼,進入桌面,如下圖:
此處的網絡是依賴宿主機的網絡,如下圖:
2.3.4.3 QEMU使用小技巧
????????一個小技巧,快捷鍵: ctrl+alt+f ,實現qemu的全屏和非全屏切換,很方便,使用QEMU時鼠標太飄,實在不太方便。
3、數據備份
3.1 使用邏輯備份備份整個數據庫
## 備份整個數據庫
mysqldump -u username -p database_name > backup.sql
## 舉例
mysqldump -u root -p ods > /databack /odsbackup.sql;
輸入root密碼,備份開始
## 壓縮備份語法
mysqldump -u username -p database_name | gzip > backup.sql.gz## 舉例
mysqldump -u root -p ods |gzip> /databack /odsbackup.sql.gz;
輸入root密碼,備份開始
3.2?備份配置文件
cp /etc/my.cnf? ?/databack/
4? 卸載MySQL5.7
4.1 停止服務
systemctl stop mysqld
sudo systemctl disable mysqld
#查看狀態
systemctl status mysqld
4.2? 卸載
4.2.1?查看MySQL安裝文件
## 查詢mysql安裝文件
rpm -qa | grep mysql
## 卸載
yum -y remove 上面出現的列表名
##或者
rpm -e --nodeps 上面出現的列表名
如上述查詢無果后,則使用 rm -rf? 刪除mysql相關的目錄
## 查詢mysql目錄find / -name mysql
## 刪除mysql相關的目錄
rm -rf /var/lib/mysql/
rm -rf /usr/lib64/mysql
rm -rf /etc/selinux/targeted/active/modules/100/mysql
rm -rf /etc/selinux/targeted/tmp/modules/100/mysql
刪除my.cnf文件,先備份
cp /usr/local/mysql/my.cnf /databack/
rm -rf /etc/my.cnf #確認此文件是否是軟連接,不是則備份后,刪除
注(重新安裝的mysql不會替換這個配置文件,導致你新數據庫用的老的配置文件,可能密碼一直輸入不對,建議刪除)
5 安裝
5.1? 下載安裝文件
https://cdn.mysql.com//Downloads/MySQL-8.4/mysql-8.4.4-linux-glibc2.28-aarch64.tar.xz
5.2?解壓安裝包提取文件內容到/usr/local目錄
tar -xvf mysql-8.4.4-linux-glibc2.28-aarch64.tar.xz -C /usr/local/
cd /usr/local/
mv mysql-8.4.4-linux-glibc2.28-aarch64/ mysql/
5.3? 添加用戶組和用戶
先檢查 mysql 用戶和用戶組有沒有被使用
cat /etc/group | grep mysqlcat /etc/passwd | grep mysql
## 添加 mysql 用戶組
groupadd mysql## 添加 mysql 用戶并加入用戶組
useradd -g mysql mysql
5.4? 創建數據目錄
# 創建數據目錄
mkdir /usr/local/mysqldata /usr/local/mysqllogs /usr/local/mysql tmp # 創建錯誤日志文件
echo “” > /usr/local/mysql/logs/mysql-error.log
5.5?給目錄授權
# 給目錄授權
chgrp -R mysql /usr/local/mysql
chown -R mysql:mysql /usr/local/mysql /usr/local/mysql/data /usr/local/mysql/tmp /usr/local/mysql/logs
chmod -R 755 /usr/local/mysql
5.6??配置文件
vim /etc/my.cnf
[client]
# 客戶端連接 MySQL 服務器的端口號,通常是 3306。
port = 3306
# MySQL 服務器的套接字文件路徑,用于本地連接。
socket = /tmp/mysql.sock
[mysqld]
# MySQL 服務器監聽的端口號,通常也是 3306。
port = 3306
# MySQL 服務器的套接字文件路徑,用于本地連接。
socket = /tmp/mysql.sock
# MySQL 的根目錄路徑,通常用于安裝 MySQL 的根目錄。
basedir = /data/mysql
# 存放數據庫文件的目錄路徑。
datadir = /data/mysql_data
# 啟用binglog日志文件,可以指定目錄,如果不指定則放在數據目錄下面
log_bin = mysql-bin
#存放 MySQL 進程 ID 的文件路徑。
pid-file = /data/mysql_data/mysql.pid
#錯誤日志路徑
log_error = /data/mysql_logs/mysql-error.log
# 表名大小寫不敏感 (1 表示啟用:不區分大小寫)
lower_case_table_names = 1
5.7?設置開機自動啟動
# 設置系統引導時自動啟動 MySQL 服務。
cp -rf /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqldchmod +x /etc/init.d/mysqld# 設置開機啟動
systemctl enable mysqld
5.8?添加環境變量
vim /etc/profile
# 在尾部添加
export MYSQL_HOME=/usr/local/mysql
export PATH=$PATH:$MYSQL_HOME/bin
#刷新環境變量
source /etc/profile
5.9?初始化啟動MySQL
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
5.10 啟動mysql
systemctl start mysqld
#查看狀態
systemctl status mysqld
5.11?修改MySQL密碼,并允許遠程連接
#先免密登錄
mysql -u root
#使用mysql庫
use mysql;
#更新root密碼
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
#賦予所有IP都可以使用root用戶遠程連接的權限
update user set host = '%' where user = 'root';
#創建新用戶并授權(推薦)
CREATE USER 'newuser'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'%' WITH GRANT OPTION;
#刷新權限配置
flush privileges;
#退出mysql
exit
6、導入備份數據
????????導入備份數據略