centos mysql 筆記(內含vagrant mysql 映象)
-
狂創客圈 經典圖書 : 《Netty Zookeeper Redis 高併發實戰》 面試必備 + 面試必備 + 面試必備 【部落格園總入口 】
-
瘋狂創客圈 經典圖書 : 《SpringCloud、Nginx高併發核心程式設計》 大廠必備 + 大廠必備 + 大廠必備 【部落格園總入口 】
-
入大廠+漲工資必備: 高併發【 億級流量IM實戰】 實戰系列 【 SpringCloud Nginx秒殺】 實戰系列 【部落格園總入口 】
《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數量(治標不治本):
- 進入 Mysql 資料庫檢視 maxconnectionerrors: show variables like '%max_connection_errors%';
- 修改 maxconnectionerrors 的數量為 1000: set global max_connect_errors = 1000;
- 檢視是否修改成功:show variables like '%max_connection_errors%';
- 方法二:使用 mysqladmin flush-hosts 命令清理一下 hosts 檔案:
- 查詢 mysqladmin 的路徑:whereis mysqladmin
- 執行命令,如:/usr/local/mysql5.5.35/bin/mysqladmin -uroot -pyourpwd flush-hosts
注: 方法二清理 hosts 檔案,也可以直接進入 mysql 資料庫執行命令:mysql> flush hosts;
回到◀瘋狂創客圈▶
瘋狂創客圈 - Java高併發研習社群,為大家開啟大廠之門