1. 程式人生 > 實用技巧 >centos mysql 筆記(內含vagrant mysql 映象)

centos mysql 筆記(內含vagrant mysql 映象)


《SpringCloud Nginx 高併發核心程式設計》 環境搭建 - 系列

元件 連結地址
【必須】 虛擬機器Linux 開發環境準備 https://www.cnblogs.com/crazymakercircle/p/14194688.html
Linux openresty 安裝 Linux openresty 安裝
【必須】Linux Redis 安裝(帶視訊) Linux Redis 安裝(帶視訊)
【必須】Linux Zookeeper 安裝(帶視訊) Linux Zookeeper 安裝, 帶視訊
Windows Redis 安裝(帶視訊) Windows Redis 安裝(帶視訊)
RabbitMQ 離線安裝(帶視訊) RabbitMQ 離線安裝(帶視訊)
ElasticSearch 安裝, 帶視訊 ElasticSearch 安裝, 帶視訊
Nacos 安裝(帶視訊) Nacos 安裝(帶視訊)
【必須】Eureka Eureka 入門,帶視訊
【必須】springcloud Config 入門,帶視訊 springcloud Config 入門,帶視訊
【必須】SpringCloud 腳手架打包與啟動 SpringCloud腳手架打包與啟動
Linux 自啟動 假死自啟動 定時自啟 Linux 自啟動 假死啟動

centos mysql 虛擬機器映象

瘋狂創客圈網盤,為大家準備了springcloud.box 虛擬機器映象,裡邊預裝了java 、 redis 、zookeeper、kafka、Eureka、springcloud config、mysql 等必須的元件,省去大家準備開發環境的煩惱,何不妙哉

。網盤地址請參見【部落格園總入口

如果真正要自己安裝,請使用下面的教程。 這也是筆者的安裝筆記,並且會持續進行問題記錄。

安裝mysql

在CentOS中預設安裝有MariaDB,這個是MySQL的分支,但為了需要,還是要在系統中安裝MySQL,而且安裝完成之後可以直接覆蓋掉MariaDB。

1 下載並安裝MySQL官方的 Yum Repository

由於CentOS 的yum源中沒有mysql,需要到mysql的官網下載yum repo配置檔案。下載命令:

[root@localhost ~]# wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm

執行過程如下:

[root@localhost work]# wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
--2020-12-27 02:02:22--  http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
.....
HTTP request sent, awaiting response... 200 OK
Length: 25548 (25K) [application/x-redhat-package-manager]
Saving to: ‘mysql57-community-release-el7-10.noarch.rpm’

100%[==================================================================================================>] 25,548       127KB/s   in 0.2s

2020-12-27 02:04:42 (127 KB/s) - ‘mysql57-community-release-el7-10.noarch.rpm’ saved [25548/25548]


使用上面的命令就直接下載了安裝用的Yum Repository,大概25KB的樣子,

然後進行repo的安裝:

rpm -ivh mysql57-community-release-el7-10.noarch.rpm

執行過程如下:

[root@localhost work]# rpm -ivh mysql57-community-release-el7-10.noarch.rpm
warning: mysql57-community-release-el7-10.noarch.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:mysql57-community-release-el7-10 ################################# [100%]

執行完成後會在/etc/yum.repos.d/目錄下生成兩個repo檔案mysql-community.repo mysql-community-source.repo

使用yum命令即可完成安裝

必須進入到 /etc/yum.repos.d/目錄後再執行以下指令碼, 然後就可以直接yum安裝了。

[root@localhost ~]# yum install mysql-server

這步可能會花些時間,安裝完成後就會覆蓋掉之前的mariadb。


[root@localhost yum.repos.d]# yum install mysql-server
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 .....
Installed:
  mysql-community-libs.x86_64 0:5.7.32-1.el7 mysql-community-libs-compat.x86_64 0:5.7.32-1.el7 mysql-community-server.x86_64 0:5.7.32-1.el7

Dependency Installed:
  mysql-community-client.x86_64 0:5.7.32-1.el7                         mysql-community-common.x86_64 0:5.7.32-1.el7

Dependency Updated:
  openssl.x86_64 1:1.0.2k-21.el7_9             openssl-libs.x86_64 1:1.0.2k-21.el7_9             postfix.x86_64 2:2.10.1-9.el7

Replaced:
  mariadb-libs.x86_64 1:5.5.44-2.el7.centos

Complete!

啟動msyql:

啟動MySQL

systemctl start mysqld 

登入:

獲取安裝時的臨時密碼(在第一次登入時就是用這個密碼):grep 'temporary password' /var/log/mysqld.log

[root@localhost yum.repos.d]# grep 'temporary password' /var/log/mysqld.log
2020-12-27T02:34:04.063826Z 1 [Note] A temporary password is generated for root@localhost: LXwH6NSf*kVh

使用臨時密碼,登入mysql

mysql -u root -p


然後輸入密碼(剛剛獲取的臨時密碼)LXwH6NSf*kVh

登入成功後,修改密碼

1、首先需要設定密碼的驗證強度等級,設定 validate_password_policy 的全域性引數為 LOW 即可,

輸入設值語句 “ set global validate_password_policy=LOW; ” 進行設值,

2、當前密碼長度為 8 ,如果不介意的話就不用修改了,按照通用的來講,設定為 6 位的密碼,設定 validate_password_length 的全域性引數為 6 即可,

輸入設值語句 “ set global validate_password_length=6; ” 進行設值,

3、現在可以為 mysql 設定簡單密碼了,只要滿足六位的長度即可,

輸入修改語句 “ ALTER USER 'root'@'localhost' IDENTIFIED BY '123456'; ” 可以看到修改成功,表示密碼策略修改成功了!!!

執行過程如下:

[root@localhost yum.repos.d]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.32

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> set global validate_password_policy=LOW
    -> ;
Query OK, 0 rows affected (0.03 sec)

mysql> set global validate_password_length=6;
Query OK, 0 rows affected (0.01 sec)

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.04 sec)

注意:一定要記得在寫sql的時候要在語句完成後加上" ; "

常用命令

1、啟動MySQL

systemctl start mysqld

2、關閉MySQL

systemctl stop mysqld

3、重啟MySQL

systemctl restart mysqld

4、檢視MySQL執行狀態

systemctl status mysqld

5、設定開機啟動

systemctl enable mysqld

6、關閉開機啟動

systemctl disable mysqld

問題排解

mysql帳號不允許從遠端登陸

預設情況下,mysql帳號不允許從遠端登陸,只能在localhost登入。本文提供了二種方法設定mysql可以通過遠端主機進行連線。

  • 一、改表法
    在localhost登入mysql後,更改 “mysql” 資料庫裡的 “user” 表裡的 “host” 項,將”localhost”改稱”%”
#mysql -u root -p
Enter password:
mysql>use mysql;
mysql>update user set host = '%' where user = 'root';
mysql>select host, user from user;


​ 說明: % 代表任意的客戶端,可替換成具體IP地址。

  • 二、授權法

例如: 你想myuser使用mypassword(密碼)從任何主機連線到mysql伺服器的話。

  mysql>GRANT ALL PRIVILEGES ON . TO ‘myuser’@’%’IDENTIFIED BY ‘mypassword’ WITH GRANT OPTION;

  如果你想允許使用者myuser從ip為192.168.1.6的主機連線到mysql伺服器,並使用mypassword作為密碼

mysql>GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.3'IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
mysql>FLUSH PRIVILEGES


配置預設編碼為utf8:

vi /etc/my.cnf 

新增

 [mysqld]

 character_set_server=utf8 
 init_connect='SET NAMES utf8'

其他配置檔案:

/etc/my.cnf 日誌檔案:/var/log//var/log/mysqld.log

服務啟動指令碼:/usr/lib/systemd/system/mysqld.service

socket檔案:/var/run/mysqld/mysqld.pid

不區分大小寫

找到你安裝MySQL的時候的my.cnf這個檔案
如下圖所示:在 mysqld下新增一行
lower_case_table_names=1 (1不區分大小寫,0區分大小寫,預設為0)

遠端連線 Mysql 太慢問題

嘗試解決了一下上面的連線超時問題,但是發現並沒有什麼用,還是會出現上面的問題。於是便懷疑是不是遠端連線 Mysql 太慢導致了連線超時?因為我在 CentOS7 服務端和 Windows 本地的 Navicat 連線 mysql 都沒問題。在網上查詢了下,發現在 mysql 的配置檔案 /etc/my.cnf 中增加如下配置引數:

# 注意該配置是加在[mysqld]下面

[mysqld]

skip-name-resolve

然後需要重啟 mysql 服務。因為根據說明,如果 mysql 主機查詢和解析 DNS 會導致緩慢或是有很多客戶端主機時會導致連線很慢。同時,請注意在增加該配置引數後,mysql的授權表中的host欄位就不能夠使用域名而只能夠使用ip地址了,因為這是禁止了域名解析的結果。

從防火牆開放埠,或者關閉防火牆

  • 通過systemctl status firewalld檢視firewalld狀態
[root@localhost yum.repos.d]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
  • 如果要關閉防火牆設定,可能通過systemctl stop firewalld這條指令來關閉該功能。
systemctl stop firewalld.service   #關閉防火牆

  • 啟動防火牆
systemctl start firewalld

再次通過systemctl status firewalld檢視firewalld狀態,顯示running即已開啟了。

  • 增加防火牆放行的規則:

再次執行執行firewall-cmd --permanent --zone=public --add-port=3306/tcp,提示success,表示設定成功,

firewall-cmd --permanent --zone=public --add-port=3306/tcp
  • 這樣就可以繼續後面的設定了。重新載入防火牆
firewall-cmd --reload

說明:開發環境,關閉防火牆即可

報錯:Specified key was too long; max key length is 767 bytes

1 ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes

版本5.6 解決方案;通過root賬號,設定兩個全域性變數:

set global innodb_large_prefix=on;
set global innodb_file_format=Barracuda;

報錯:MySql Host is blocked because of many connection errors;

具體異常

MySql Host is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'

  • 原因分析:

檢視 tomcat 的日誌檔案,發現在報錯開始部分出現了這個錯誤。經過查詢,發現這個錯誤的 原因 是:同一個 ip 在短時間內產生太多(超過 mysql 資料庫 maxconnectionerrors 的最大值)中斷的資料庫連線而導致的阻塞。

  • 解決方法:

進入 CentOS7 伺服器:

  • 方法一:提高允許的maxconnectionerrors數量(治標不治本):
  1. 進入 Mysql 資料庫檢視 maxconnectionerrors: show variables like '%max_connection_errors%';
  2. 修改 maxconnectionerrors 的數量為 1000: set global max_connect_errors = 1000;
  3. 檢視是否修改成功:show variables like '%max_connection_errors%';
  • 方法二:使用 mysqladmin flush-hosts 命令清理一下 hosts 檔案:
  1. 查詢 mysqladmin 的路徑:whereis mysqladmin
  2. 執行命令,如:/usr/local/mysql5.5.35/bin/mysqladmin -uroot -pyourpwd flush-hosts

注: 方法二清理 hosts 檔案,也可以直接進入 mysql 資料庫執行命令:mysql> flush hosts;

回到◀瘋狂創客圈

瘋狂創客圈 - Java高併發研習社群,為大家開啟大廠之門