第2章-MySQL8.0安裝方式及安裝
2.1 MySQL版本背景與選擇
1)MySQL版本發展背景
https://mirrors.aliyun.com/mysql/
2)企業版與社區版
3)社區版版本選擇
大方向:GA,退后6-12月,前面沒有太多小版本,作為選擇.
5.6 : 5.6.40 + 雙數版,經典版,官方即將停止更新.
5.7 : 5.7.22/30 + 雙數版,主流,逐步過渡到8.0
8.0 : 8.0.26 + 雙數版,開始評測,小規模邊緣業務數據庫使用.
本文着眼於當下和未來,因此,講解主要以MySQL8.0為主,同時兼顧MySQL 5.7,並盡可能兼顧MySQL5.6,當下的互聯網企業是MySQL5.6正逐步淘汰,MySQL 5.7為絕對主流,MySQL8.0時代即將到來。
2.2 MySQL安裝方式及選擇
數據庫:
1.yum 簡單 自動解決依賴(默認源沒有數據庫). 沒法定制.
https://www.cnblogs.com/oldboy666/p/15559963.html
2.二進制 比較簡單,沒辦法定制,軟件大. ***** 中小企業
3.rpm 復雜 下載 手工解決依賴 沒法定制
https://www.cnblogs.com/oldboy666/p/15558992.html
4.源碼編譯 特別復雜 編譯軟件gcc都需要升級,可以定制任何東西. 百度\阿里===>改動源碼===>編譯==>rpm==>yum
2.3 MySQL軟件獲取
官方:
https://downloads.mysql.com/archives/community/
國內鏡像:
https://mirrors.aliyun.com/mysql/
https://mirrors.aliyun.com/mysql/MySQL-8.0/mysql-8.0.26-linux-glibc2.12-x86_64.tar.xz
2.4 MySQL最新版8.0.26企業級安裝實踐
1.MySQL安裝硬件環境准備
如果讀者沒有物理服務器環境,則可以搭建vmware等虛擬機環境學習,相應地則需准備如下內容:
1)VM虛擬機內存最好設置4GB以上。
2)提前下載好要安裝的MySQL8.0軟件包。
生產物理服務器:
SSD固態+Raid10(Raid5)
內存:64G/128G/256G
2.安裝MySQL前軟件環境准備
#1)查看系統環境
[root@oldboy ~]# cat /etc/redhat-release #<==操作系統版本。
CentOS Linux release 7.9.2009 (Core)
#2)關閉selinux:
setenforce 0
getenforce
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
#3)卸載mariadb依賴包
yum remove mariadb-libs -y #<==卸載系統已經安裝的mariadb依賴包。
#4)安裝相關依賴包
yum install ncurses ncurses-devel libaio-devel openssl openssl-devel -y
#5)關閉防火牆
systemctl stop firewalled
3.開始安裝MySQL
本書使用DBA人員比較常用、簡單得二進制方式安裝MySQL,安裝過程如下。
(1)建立MySQL用戶賬號
首先以root身份登錄到Linux系統中,然后執行如下命令創建mysql用戶賬號:
[root@oldboy ~]# useradd mysql -s /sbin/nologin -M #<==創建mysql用戶。
[root@oldboy ~]# id mysql
(2)下載、解壓mysql軟件包,並做好軟鏈接mysql到/usr/local。
[root@oldboy ~]# cd /opt
[root@oldboy opt]# wget https://mirrors.aliyun.com/mysql/MySQL-8.0/mysql-8.0.26-linux-glibc2.12-x86_64.tar.xz
[root@oldboy opt]# tar xf mysql-8.0.26-linux-glibc2.12-x86_64.tar.xz
[root@oldboy opt]# ln -s /opt/mysql-8.0.26-linux-glibc2.12-x86_64 /usr/local/mysql
[root@oldboy opt]# ls -l /usr/local/mysql
###mv /opt/mysql-8.0.26-linux-glibc2.12-x86_64 /usr/local/mysql
(3)創建MySQL數據目錄、配置文件(/etc/my.cnf)並授權
#1)增加簡易配置文件,后面在優化
cat>/etc/my.cnf<<'EOF'
#by oldboy weixin:oldboy0102
[mysqld]
user=mysql
basedir=/usr/local/mysql
datadir=/data/3306/data
port=3306
socket=/tmp/mysql.sock
[client]
socket=/tmp/mysql.sock
EOF
cat /etc/my.cnf
chown mysql.mysql /etc/my.cnf
#2)創建MySQL數據目錄並授權
mkdir -p /data/3306/data
chown -R mysql.mysql /data
ls -ld /data
(4)配置PATH環境變量,並初始化MySQL數據庫
#1) 配置PATH環境變量
echo 'export PATH=/usr/local/mysql/bin:$PATH' >>/etc/profile
. /etc/profile
echo $PATH
#2)初始化MySQL數據庫
/usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3306/data
重點知識1 : 之前不同版本的初始化命令異同
/usr/local/mysql/scripts/mysql_install_db #5.7之前
/usr/local/mysql/bin/mysqld #5.7和8.0初始化
重點知識2: --initialize和--initialize-insecure區別
--initialize: 會生成一個12位,4種密碼復雜度臨時管理員密碼. 第一次登陸需要修改.
--initialize-insecure:管理員密碼為空.
來自8.0官方翻譯 by oldboy:
mysql_install_db程序已從MySQL發行版中刪除。數據目錄初始化應通過使用 --initialize 或--initialize-insecure選項調用mysqld來執行。 此外,刪除了mysql_install_db使用的mysqld選項,並刪除了控制mysql_install_db安裝位置的選項。
(5)初始化數據庫的原理及結果說明
初始化數據庫的實質就是創建基礎的數據庫系統的庫文件等信息,例如:生成mysql庫表等。
2.2.2配置並啟動MySQL數據庫
1.設置MySQL啟動腳本
cd /usr/local/mysql/support-files/
cp mysql.server /etc/init.d/mysqld #<==拷貝mysql啟動腳本到啟動路徑。
systemctl enable mysqld #<==等價chkconfig mysqld on(c7把服務設置開機自啟動命令)
2.啟動MySQL數據庫
systemctl start mysqld
提示:使用kill -9 ID關閉數據庫引起數據庫故障案例
http://oldboy.blog.51cto.com/2561410/1431161。
3.檢查MySQL數據庫是否啟動。
netstat -lntup|grep 330
4.查看MySQL數據庫啟動結果日志。
cat /data/3306/data/oldboy.err
2.2.3登錄MySQL測試
執行登錄命令如下:
......
2.2.4 MySQL安裝常見故障分析及解決方案
問題1:初始化報錯libaio
[root@oldboy opt]# mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3306/data
mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
原因:缺少libaio-devel依賴包
解決:yum install libaio-devel -y
如果不知道包名,可以執行 yum provides libaio -y查.
問題2: 初始化報錯數據文件目錄不為空
2021-11-09T04:08:57.631792Z 0 [ERROR] [MY-010457] [Server] --initialize specified but the data directory has files in it. Aborting.
2021-10-09T04:08:57.631803Z 0 [ERROR] [MY-013236] [Server] The designated data directory /data/3306/data/ is unusable. You can remove all files that the server added to it.
解決:rm -rf /data/3306/data/*
問題3:啟動后初始無法登錄
[root@oldboy ~]# mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
原因:此問題一般都是數據庫初始化問題或者數據庫文件損壞以及目錄權限問題。
解決辦法:刪除初始化目錄,然后重新初始化數據庫,剩余過程不變。
rm -rf /data/3306/data/*
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3306/data
Access denied問題原因:
1.數據庫初始化問題
2.目錄權限問題
3.系統數據庫文件損壞
4.用戶密碼不對
5.授權主機范圍不對.