(MySQL挖坑筆記)最詳細 Linux下二進制安裝MySQL 5.7.28
簡介
MySQL 是目前最流行的關係型開源數據庫之一,由於其開源,很受中小企業的青睞;因此掌握其使用也是作爲一枚技術的必備打怪技能之一;
一、安裝環境簡介
系統環境:CentOS Linux release 7.6.1810 (Core)
MySQL版本:MySQL 5.7.28(mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz)
官方下載:https://dev.mysql.com/downloads/mysql/
二、MySQL 安裝
1. 創建數據倉庫目錄與安裝目錄
mkdir -p /data/mysql # 數據倉庫目錄
mkdir -p /opt/mysql # 安裝目錄
2. 添加mysql用戶並修改mysql目錄權限
groupadd mysql # 添加 mysql 用戶組
useradd -r -g mysql mysql -s /bin/false # 添加 msyql用戶禁止登錄shell
chown -R mysql:mysql /data/mysql
chown -R mysql:mysql /opt/mysql
3. 解壓二進制壓縮包到安裝目錄
yum install -y numactl-libs libaio # 安裝依賴
tar -xvf mysql-5.7.28-linux-glibc2.12-x86_64.tar -C /opt # 解壓文件
ln -s mysql-5.7.28 mysql # 生成軟連接,便於版本管理
4. 初始化MySQL 數據庫參數
cd /opt/mysql/bin # 切換到mysqld 目錄
./mysqld --defaults-file=/etc/my.cnf --basedir=/opt/mysql --datadir=/data/mysql --user=mysql --initialize
初始化:
#############
[root@docker bin]# ./mysqld --defaults-file=/etc/my.cnf --basedir=/opt/mysql/ --datadir=/data/mysql/ --user=mysql --initialize
2020-07-01T05:21:18.378589Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2020-07-01T05:21:19.303643Z 0 [Warning] InnoDB: New log files created, LSN=45790
2020-07-01T05:21:19.433393Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2020-07-01T05:21:19.518458Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: b1f34d3c-bb5a-11ea-9911-000c2948dd1c.
2020-07-01T05:21:19.520205Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2020-07-01T05:21:20.528572Z 0 [Warning] CA certificate ca.pem is self signed.
2020-07-01T05:21:20.598496Z 1 [Note] A temporary password is generated for root@localhost: `!sa2yywEydgb` ## 臨時root 密碼注意保存
###############
生成SSL 文件:
[root@docker mysql]# bin/mysql_ssl_rsa_setup --datadir=/opt/mysql
Generating a 2048 bit RSA private key
...............................................................+++
.......................................................+++
writing new private key to 'ca-key.pem'
-----
Generating a 2048 bit RSA private key
.................................................+++
............................................................................................................................................................+++
writing new private key to 'server-key.pem'
-----
Generating a 2048 bit RSA private key
.......+++
..........................................+++
writing new private key to 'client-key.pem'
-----
5. 配置最小化 MySQL 配置文件
[root@docker Tools]# vim /etc/my.cnf
[mysqld]
basedir=/opt/mysql # 安裝目錄
datadir=/data/mysql # 數倉目錄
port=3306 # 服務端口
user=mysql # 啓動用戶
bind-address=0.0.0.0 # 綁定網卡
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
[mysqld_safe]
err-log==/var/log/mysql/mysqld.log # 錯誤日誌
pid-file=/opt/mysql/mysqld.pid # pid 文件
6. 添加MySQL 系統環境變量
[root@docker Tools]# vim /etc/profile
# MySQL 家目錄
MYSQL_ROOT=/opt/mysql
PATH=$PATH:$HOME/bin:$MYSQL_ROOT/bin
export PATH
7. 配置service 服務,支持service 服務管理
默認basedir
和datadir
是
mysqld_pid_file_path=
if test -z "$basedir"
then
basedir=/usr/local/mysql
bindir=/usr/local/mysql/bin
if test -z "$datadir"
then
datadir=/usr/local/mysql/data
fi
sbindir=/usr/local/mysql/bin
libexecdir=/usr/local/mysql/bin
修改爲自定義目錄
[root@docker support-files]# vim /opt/mysql/support-files/mysql.server
複製修改後的server 服務到 /etc/init.d/mysql
[root@docker support-files]# cp mysql.server /etc/init.d/mysql
通過server 管理mysql
[root@docker support-files]# service mysql status # 查看當前MySQL服務狀態
SUCCESS! MySQL running (42113)
[root@docker support-files]# service mysql restart #重啓MySQL服務
Shutting down MySQL.. SUCCESS!
Starting MySQL. SUCCESS!
[root@docker support-files]# service mysql stop # 停止MySQL 服務
Shutting down MySQL.. SUCCESS!
8. 配置 MySQL 自啓
# chmod 755 /etc/init.d/mysql # 修改權限
# chkconfig --add mysql # 添加自啓動
# chkconfig --level 345 mysql on # 添加不同級別的配置
9. 啓動MySQL並測試數據庫連接
更新臨時密碼:
[root@docker ~]# mysql -uroot -p # 使用臨時密碼登錄MySQL
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.28 MySQL Community Server (GPL)
mysql> set password=password('passwod'); # 更新默認密碼
mysql>grant all privileges on *.* to 'root'@'%' identified by 'password'; #授權 root 用戶可以在任何主機遠程登錄
mysql>flush privileges; # 刷新權限
查看當前的用戶登錄主機
mysql> select host,user from mysql.user;
+-----------+---------------+
| host | user |
+-----------+---------------+
| % | root |
| % | test1 |
| localhost | mysql.session |
| localhost | mysql.sys |
+-----------+---------------+
4 rows in set (0.00 sec)
使用遠程連接測試:
10. 配置Firewalls 防火牆
firewall-cmd --permanent --add-service=mysql
firewall-cmd --reload
firewall-cmd --permanent --list-all
public # public 域
target: default
icmp-block-inversion: no
interfaces:
sources:
services: ssh dhcpv6-client mysql # 啓用的服務
查看MySQL監聽狀態:
通過端口:
[root@docker ~]# ss -ntpl | grep mysql
LISTEN 0 80 *:3306 *:* users:(("mysqld",pid=95559,fd=31))
通過遠程Telnet
telnet IP 3306
三、MySQL 挖坑
【坑一】
#########################################################################
[root@docker opt]# /opt/mysql/bin/mysqld_safe
2020-07-01T05:31:58.293272Z mysqld_safe Logging to ‘/data/mysql/docker.com.err’.
2020-07-01T05:31:58.319322Z mysqld_safe Starting mysqld daemon with databases from /data/mysql
2020-07-01T05:31:58.656425Z mysqld_safe mysqld from pid file /opt/mysql/mysqld.pid ended
【ERROR】
2020-07-01T05:31:05.175679Z 0 [ERROR] /opt/mysql/bin/mysqld: Can’t create/write to file ‘/opt/mysql/mysqld.pid’ (Errco
de: 13 - Permission denied)
2020-07-01T05:31:05.175689Z 0 [ERROR] Can’t start server: can’t create PID file: Permission denied
###########################################################################
【解決】:
檢查 hostname.err文件,默認位置在$datadir中,tail -n 100看一下是否有ERROR,通過上面的Error 看出是由於PID文件無權限創建,因此,增加對PID存放目錄的權限
chown -R mysql:mysql /opt/mysql
【坑二】
配置文件my.cnf
配置sock 存放目錄,導致無法正常連接MySQL ,
##############################################################
[root@docker ~]# mysql -uroot -p
Enter password:
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2)
############################################################
【解決】
不進行sock存放配置;暫時處理