伺服器安裝部署-01-MySQL

1 MySQL

1.1 安裝

在root用戶許可權下

# 創建mysql用戶和用戶組,同時禁止登陸
shell> groupadd mysql
shell> useradd -r -g mysql -s /bin/false mysql

# tar解壓mysql壓縮包,同時把他移到你向安裝的位置
shell> tar -xvf mysql.tar.xz
shell> tar -zxvf mysql.tar.gz
shell> mv [mysql文件夾] [目的地]
shell> cd [目的地]

# 在當前文件夾下創建數據文件夾和日誌文件夾 PS.這是我個人的習慣
shell> mkdir data
shell> mkdir log

# 更改當前文件夾下的用戶
shell> chown -R mysql ./
shell> chgrp -R mysql ./

# 初始化mysql,這裡會生成一個隨機密碼,可以記下來。如果忘記了,那就只能再來一次。
# 如果不想有隨機密碼生成,用這個選項 --initialize-insecure,不過這個選項不會在第一次登陸的時候提示你去改密碼
shell> ./bin/mysql --initialize --user=mysql --basedir=[mysql目錄] --datadir[data目錄]

# 檢查是否安裝成功,進行啟動驗證
shell> ./support-files/mysql.server start

# 啟動之後,登陸mysql,然後修改root密碼
shell> ./bin/mysql -uroot -p
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '新密碼';

# 允許root賬戶遠程登陸
mysql> use mysql;
mysql> update user set host='%' where user='root';

1.2 錯誤排查

遇到錯誤不要怕,先看看日誌怎麼說

1)找不到日誌/日誌文件夾為空

解決

檢查my.cnf文件中的 log-error配置,看看這裡配置的文件夾和文件是不是不存在。如果存在的話檢查許可權

原因

mysql運行使用的用戶是mysql,這個用戶沒有許可權創建文件和文件夾

2)can『t connect local mysql server through socket ‘/xxx/xxx/mysql.sock’

這錯誤一般在連接的時候出現

解決方案

檢查 my.cnfclient條目下關於socket的配置,如果文件夾不存在的話就給他創建好,然後改變用戶和用戶組。

萬能方案:都丟到mysql目錄下

3)couldn’t create xxx file [目錄]

這個錯誤一般在初始化mysql的時候出現

解決方案

檢查目錄是否存在以及目錄所屬用戶和用戶組

4)不能通過systemctl管理mysql

解決方案

shell> cd /usr/lib/systemd/system
# 文件名隨你定,但是要用「.service」結尾
shell> touch mysqld.service
shell> chmod 644 mysqld.service

把下面內容複製進去,文件來自//dev.mysql.com/doc/mysql-secure-deployment-guide/8.0/en/secure-deployment-post-install.html

[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=//dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target

[Install]
WantedBy=multi-user.target

[Service]
User=mysql
Group=mysql

# Have mysqld write its state to the systemd notify socket
Type=notify

# Disable service start and stop timeout logic of systemd for mysqld service.
TimeoutSec=0

# Start main service
# 這裡要記得改成你的mysqld的路徑
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf $MYSQLD_OPTS 

# Use this to switch malloc implementation
EnvironmentFile=-/etc/sysconfig/mysql

# Sets open_files_limit
LimitNOFILE = 10000

Restart=on-failure

RestartPreventExitStatus=1

# Set environment variable MYSQLD_PARENT_PID. This is required for restart.
Environment=MYSQLD_PARENT_PID=1

PrivateTmp=false