一、解除安裝mariadb的rpm包
1、首先,你需要找出已安裝的MariaDB包的具體名稱。可以使用以下命令列出所有已安裝的MariaDB包:rpm -qa | grep mariadb
yum -y remove +【上圖的檔名】或者rpm -e --nodeps +【上圖的檔名】
二、透過yum線上安裝Mysql
1、下載mysql軟體源
(1)找到對應linux的版本進行下載、[root@x86b ~]# cat /etc/redhat-release CentOS Stream release 8
下載地址:https://dev.mysql.com/downloads/repo/yum/ 或 http://repo.mysql.com
#使用wget下載mysql(el8) wget http://repo.mysql.com/mysql80-community-release-el8.rpm
2、安裝mysql
(1)安裝軟體源。透過yum安裝方法,會直接新增mysql環境變數和啟動服務yum -y install mysql80-community-release-el8.rpm
yum -y install mysql-community-server
3、修改配置檔案並啟動服務
(1)修改配置檔案。vim /etc/my.cnf新增配置
symbolic-links=0 # 關閉mysql的符號連結 #skip-grant-tables # 忽略密碼驗證 port=3306 # mysql監聽埠 character-set-server=utf8 # 指定mysql的字符集為utf8 #lower_case_table_names=1 #(先不用加)
(2)啟動服務並檢視服務狀態
systemctl start mysqld # 一定要啟動服務 systemctl status mysqld # 檢視服務狀態 systemctl enable mysqld # 開機自啟動
4、檢視初始密碼並修改
(1)檢視mysql初始密碼grep "password" /var/log/mysqld.log
(2)修改密碼驗證策略。透過初始密碼登入mysql
mysql -u root -p <密碼> SHOW VARIABLES LIKE 'validate_password.%';
set global validate_password.policy=0; //設定複雜度為0 set global validate_password.length=6; //設定最小長度6 set global validate_password.check_user_name=off; //設定使用者名稱密碼可以相同
出現這個問題是因為並沒有安裝validate_password外掛。具體操作如下:
# 每個平臺的檔名字尾都不同對於Unix和類Unix系統為.so,對於 Windows為.dll
INSTALL PLUGIN validate_password SONAME 'validate_password.so'
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
ALTER USER 'root'@'%' IDENTIFIED BY '123456';
# 選擇資料庫 use mysql; # 最後授權MySQL,允許遠端使用者登入訪問MySQL update user set host = '%' where user = 'root'; select host, user from user; # 重新整理許可權 flush privileges;
5、檢視3306埠是否開啟
netstat -an|grep 3306
發現沒有,然後需要在vim /etc/my.cnf檔案中新增port = 3306然後儲存
若還是不行,則登入到資料庫裡
(1)檢視port引數
show global variables like 'port';
注意埠果然變成0了
(2)檢視skip_networking引數
show variables like 'skip_networking';
果然設定了skip-networking引數,這個就是導致mysql監聽的埠變成0,並且透過網路無法登入資料庫的主要原因了
(3)檢視cnf檔案中是否有skip-networking引數或skip-grant-tables引數
註釋掉後重啟mysqld服務,再次檢視3306埠就有了
6、排錯
(1)ERROR 1146 (42S02): Table 'mysql.user' doesn't exist
一般是/etc/my.cnf寫的地址與安裝時指定的不一樣
(2)ERROR! The server quit without updating PID file (/usr/local/mysql/data/x86a.pid)
可能已經存在mysqld程序
ps -ef | grep mysql pkill -9 mysqld
// 先執行: flush privileges; // 再執行修改密碼命令就可以了: set password for root@localhost=password('你的密碼');
遠端連線使用者許可權不足,可以使用以下命令授予許可權:
GRANT ALL PRIVILEGES ON slurm_jobcomp_db.* TO slurm@'localhost'; FLUSH PRIVILEGES;
報錯可以看出root沒有許可權,查詢使用者表看root使用者許可權
SELECT host,user,Grant_priv,Super_priv FROM mysql.user;
UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root'; FLUSH PRIVILEGES;
三、原始碼安裝mysql
apt-get install mariadb-server libhdf5-dev libmunge-dev libmariadb-dev-compat1、下載mysql並新增使用者
下載地址:https://downloads.mysql.com/archives/community/ 或 http://mirrors.sohu.com/mysql/useradd -s /sbin/nologin mysql mkdir /usr/local/mysql mkdir /usr/local/mysql/data
當讓MySQL執行的時候使用一個獨立的賬號和使用者組時,該使用者和使用者組許可權是可以控制的。當系統中檔案的許可權未設定給Mysql使用者以及使用者組時,Mysql使用者無法進行讀寫執行操作。而如果MySQL被黑了,可以通那麼開始拿到的許可權就是那個建立的賬號而不是預設的root,我們在編譯安裝的時候建立一個mysql組和一個mysql使用者,並把datadir和安裝目錄屬主改為mysql。
在MySQL啟動的時候,單程序mysqld,該程序的屬主就是mysql,這樣就保證了mysql服務的獨立性,即使mysql服務被黑掉,得到了mysql使用者許可權,也不會影響整個系統的安全。
2、cmake配置並編譯安裝
cmake \ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ # 安裝目錄 -DMYSQL_DATADIR=/usr/local/mysql/data \ # 資料庫存放目錄 -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \ # Unix socket檔案路徑 -DWITH_MYISAM_STORAGE_ENGINE=1 \ # 安裝myisam儲存引擎 -DWITH_INNOBASE_STORAGE_ENGINE=1 \ # 安裝innodb儲存引擎 -DWITH_PARTITION_STORAGE_ENGINE=1 \ -DENABLED_LOCAL_INFILE=1 \ # 安裝資料庫分割槽 -DDEFAULT_CHARSET=utf8 \ # 使用utf8字元 -DDEFAULT_COLLATION=utf8_general_ci \ -DMYSQL_USER=mysql \ -DMYSQL_TCP_PORT=3306 \ -DWITH_BOOST=/usr/local/boost
3、建立my.cnf配置檔案
(1)vim /etc/my.cnf[mysqld] basedir=/usr/local/mysql # mysql安裝目錄 datadir=/usr/local/mysql/data # mysql資料存放目錄 socket=/usr/local/mysql/mysql.sock # mysql.sock檔案存放目錄 user=mysql symbolic-links=0 # 關閉mysql的符號連結 skip-grant-tables # 忽略密碼驗證 [mysqld_safe] port=3306 # mysql監聽埠 character-set-server=utf8 # 指定mysql的字符集為utf8 log-error=/usr/local/mysql/mysqld.log # 指定mysql的錯誤日誌存放路徑 pid-file=/usr/local/mysql/mysqld.pid # mysql的pid檔案存放目錄 # The end
chmod 600 /etc/my.cnf
【注意】:所有my.cnf指定的目錄mysql使用者都要有讀寫許可權。symbolic-links符號連結支援在別的目錄下存放mysql的資料庫檔案,當我們mysql資料盤滿了以後,可以啟動symbolic-links=1,把mysql的資料放在別的目錄下,然後連結到mysql的datadir目錄下。
(2)設定mysql目錄許可權
chown -R mysql:mysql /usr/local/mysql
4、設定mysql服務
(1)將mysql設定成系統服務,生成服務啟動指令碼cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld chmod +x /etc/init.d/mysqld
chkconfig --add mysqld //把mysql新增到系統服務 chkconfig mysqld on //把mysql新增到開機自啟動 chkconfig --list mysqld //檢視mysql開機自啟動狀態
vim /etc/profile.d/mysql.sh export PATH=/usr/local/mysql/bin:$PATH source /etc/profile.d/mysql.sh
5、啟動服務並修改密碼
(1)初始化資料庫如果無法啟動mysql
/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/
(2)啟動mysql服務
systemctl start mysqld(/etc/init.d/mysqld start) systemctl status mysqld
mysql -u root -p update mysql.user set authentication_string=password('123456') where user='root';
6、mysql原始碼編譯常見錯誤
(1)錯誤:CMake Error at cmake/boost.cmake:194 (MESSAGE):問題描述:高版本mysql需要boots庫的安裝才可以正常執行
根據錯誤提示,進行處理
i、在/usr/local下建立一個名為boost的資料夾
mkdir -p /usr/local/boost
ii、進入這個新建立的資料夾然後下載boost
下載地址:https://sourceforge.net/projects/boost 或 https://sourceforge.net/projects/boost/files/boost/
iii、解壓
tar -zxvf boost_1_59_0.tar.gz -C boot
iv、繼續cmake,新增下面的部分
-DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/boost(2)錯誤:CMake Error at cmake/readline.cmake:64 (MESSAGE):
問題描述:沒有安裝ncurses-devel
i、解決辦法:yum install ncursrs-devel -y
然後重新編譯
ii、原始碼安裝ncurses-devel方式解決
下載地址:http://ftp.gnu.org/gnu/ncurses/
tar -zxvf ncurses-6.4.tar.gz ./configure --with-shared --without-debug --without-ada --enable-overwrite make && make install
解決辦法:安裝rpcsvc
下載地址:https://github.com/thkukuk/rpcsvc-proto/releases
tar -zxvf rpcsvc-proto-1.4.3.tar.gz ./autogen.sh ./configure make & make install
(4)openssl
(5)Package 'libtirpc', required by 'virtual:world', not found
解決方法:安裝libtirpc-devel(https://rpmfind.net/linux/RPM/)
解決辦法:在原始碼包裡,編輯檔案mysql-5.6.38/cmd-line-utils/libedit/terminal.c(mysql安裝包所在路徑)
把terminal_set方法中的char buf[TC_BUFSIZE];這一行註釋,再把area=buf;改為area=NULL;
更改後如下部分
protected int terminal_set(EditLine el, const char *term) { int i; /*char buf[TC_BUFSIZE];*/ char *area; const struct termcapstr *t; sigset_t oset, nset; int lins, cols; --phpfensi.com (void) sigemptyset(&nset); (void) sigaddset(&nset, SIGWINCH); (void) sigprocmask(SIG_BLOCK, &nset, &oset); area = NULL;
然後重新編譯即可
cmake ****** make && make install
。