連網安裝mysql與原始碼安裝mysql

惊小呆520發表於2024-05-24

一、解除安裝mariadb的rpm包

1、首先,你需要找出已安裝的MariaDB包的具體名稱。可以使用以下命令列出所有已安裝的MariaDB包:
rpm -qa | grep mariadb
2、刪除命令(安裝mysql不一定需要解除安裝)
yum -y remove +【上圖的檔名】或者rpm -e --nodeps +【上圖的檔名】

二、透過yum線上安裝Mysql

1、下載mysql軟體源

(1)找到對應linux的版本進行下載、
[root@x86b ~]# cat /etc/redhat-release
CentOS Stream release 8
(2)下載mysql的rpm軟體源
下載地址: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
(2)安裝MySQL伺服器:community-server
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;  //設定使用者名稱密碼可以相同
【注】:當執行 SHOW VARIABLES LIKE 'validate_password.%' 時,顯示的為 Empty set, 1 warning(0.00 sec)。

出現這個問題是因為並沒有安裝validate_password外掛。具體操作如下:
# 每個平臺的檔名字尾都不同對於Unix和類Unix系統為.so,對於 Windows為.dll
INSTALL PLUGIN validate_password SONAME 'validate_password.so'
(3)修改初始密碼
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
若出現ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'localhost'
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
(3)ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
// 先執行:
flush privileges;
// 再執行修改密碼命令就可以了:
set password for root@localhost=password('你的密碼');
(4)error: mysql_real_connect failed: 1044 Access denied for user 'slurm'@'localhost' to database 'slurm_jobcomp_db'
遠端連線使用者許可權不足,可以使用以下命令授予許可權:
GRANT ALL PRIVILEGES ON slurm_jobcomp_db.* TO slurm@'localhost';
FLUSH PRIVILEGES;
若上面這一句又出現[Err] 1044 - Access denied for user 'root'@'%' to database ' slurm_jobcomp_db '
報錯可以看出root沒有許可權,查詢使用者表看root使用者許可權
SELECT host,user,Grant_priv,Super_priv FROM mysql.user;
若root為N、N;則修改許可權,執行如下:
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-compat

1、下載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開在root上意味著它可以在系統的任何位置寫任何檔案,MySQL 開在mysql使用者上,保證它對系統大部分位置不可寫,從而MySQL即使被攻擊,也可以限制它對整個系統的影響。
當讓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
make && make install

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
(2)新增MySQL開機自啟
chkconfig --add mysqld   //把mysql新增到系統服務
chkconfig mysqld on      //把mysql新增到開機自啟動
chkconfig --list mysqld  //檢視mysql開機自啟動狀態
(3)配置環境變數
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/
【注意】:初始化完後會生成一個初始密碼,在介面上顯示,儲存下來。一會修改密碼需要用到:omrI&?hGw8li(--initialize-insecure是不設定密碼)
(2)啟動mysql服務
systemctl start mysqld(/etc/init.d/mysqld start)
systemctl status mysqld
(3)修改密碼
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/boosthttps://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 
(3)錯誤:CMake Error at rapid/plugin/group_replication/rpcgen.cmake:100 (MESSAGE):

解決辦法:安裝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/

(6)mysql登陸報錯mysql Segmentation fault (core dumped)

解決辦法:在原始碼包裡,編輯檔案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

  

相關文章