主頁 > 資料庫 > 手記系列之四 ----- 關于使用MySql的經驗

手記系列之四 ----- 關于使用MySql的經驗

2023-05-01 07:59:11 資料庫

前言

本篇文章主要介紹的關于本人在使用MySql記錄筆記的一些使用方法和經驗,溫馨提示,本文有點長,約1.5w字,幾十張圖片,建議收藏查看,

一、MySql安裝

下載地址:https://dev.mysql.com/downloads/

在安裝MySql之前,查看是否以及安裝過MySql,如果已經安裝,但是不符合要求的話就卸載,
如果是windows安裝的話,下載windows的安裝包,一路next下去,設定好賬號和密碼就行了,
1,查找以前是否裝有mysql
先輸入:

rpm -qa|grep -i mysql

查看是否安裝了mysql
這里寫圖片描述

2,停止mysql服務、洗掉之前安裝的mysql
輸入:

ps -ef|grep mysql

洗掉命令
輸入:

rpm -e –nodeps 包名

這里寫圖片描述
如果提示依賴包錯誤,則使用以下命令嘗試

rpm -ev 包名 --nodeps

如果提示錯誤:error: %preun(xxxxxx) scriptlet failed, exit status 1
則用以下命令嘗試:

rpm -e --noscripts 包名

3、查找并洗掉mysql目錄
查找結果如下:

find / -name mysql

洗掉對應的mysql目錄
具體的步驟如圖:查找目錄并洗掉
這里寫圖片描述
注意:卸載后/etc/my.cnf不會洗掉,需要進行手工洗掉

4、再次查找機器是否安裝mysql

rpm -qa|grep -i mysql

這里寫圖片描述

Mysql有兩種安裝模式,可自行選擇,

1.1 yum安裝

首先查看mysql 是否已經安裝
輸入:

rpm -qa | grep mysql   

如果已經安裝,想洗掉的話
輸入:
普通洗掉命令:

rpm -e mysql

強力洗掉命令:

rpm -e --nodeps mysql    

依賴檔案也會洗掉

安裝mysql
輸入:

yum list mysql-server  

如果沒有,則通過wget命令下載該包
輸入:

wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm   

下載成功之后,再輸入命令安裝

yum install mysql-server

在安裝程序中遇到選擇輸入y就行了
這里寫圖片描述
這里寫圖片描述

安裝成功后,輸入 service mysqld start 啟動服務
輸入:
mysqladmin -u root -p password '123456'
來設定密碼
輸入之后直接回車(默認是沒有密碼的)
然后再輸入
mysql -u root -p
這里寫圖片描述
通過授權法更改遠程連接權限
輸入: grant all privileges on . to 'root'@'%' identified by '123456';
注:第一個’root’是用戶名,第二個’%’是所有的ip都可以遠程訪問,第三個’123456’表示 用戶密碼 如果不常用 就關閉掉
輸入:flush privileges; //重繪

在防火墻關閉之后,使用SQLYog之類的工具測驗是否能正確連接

這里寫圖片描述

1.2 編譯包安裝

將下載好的mysql安裝包上傳到linux服務器
解壓mysql解壓包,并移動到/usr/local目錄下,重命名為mysql,
命令:

tar -xvf mysql-5.6.21-linux-glibc2.5-x86_64.tar.gz
mv mysql-5.6.21-linux-glibc2.5-x86_64 /usr/local
cd /usr/local
mv mysql-5.6.21-linux-glibc2.5-x86_64 mysql

這里寫圖片描述

注: mysql默認的路徑是就是/usr/local/mysql ,如果安裝的地方更改,需要更改相應的組態檔,

安裝mysql

切換到mysql的目錄 /usr/local/mysql
輸入:

 ./scripts/mysql_install_db --user=mysql

這里寫圖片描述
成功安裝mysql之后,輸入
service mysql start 或 /etc/init.d/mysql start

這里寫圖片描述
查看是否啟動成功
輸入:

 ps -ef|grep mysql

切換到 /usr/local/mysql/bin 目錄下
設定密碼
mysqladmin -u root password '123456'入mysql
輸入:

mysql -u root -p

設定遠程連接權限
輸入:

grant all privileges on *.* to 'root'@'%' identified by '123456'; 

然后輸入:

flush privileges;

說明: 第一個’root’是用戶名,第二個’%’是所有的ip都可以遠程訪問,第三個’123456’表示用戶密碼 如果不常用就關閉掉,

使用本地連接工具連接測驗

這里寫圖片描述

二、MySql排查問題的常用命令

1.查看mysql連接數

SHOW FULL PROCESSLIST;

2.查看mysql的配置

show variables like "%innodb%";

3.查看mysql事件是否開啟

show variables like 'event_scheduler';

4.查看mysql鎖的狀態

是否鎖表:

 SHOW OPEN TABLES WHERE In_use > 0;
SHOW INNODB STATUS/G;

5.查看mysql data的存放位置

SHOW VARIABLES LIKE '%datadir%'

6.查看mysql 的超時時間設定

show variables like '%timeout%';

7.查看mysql 的日志存放

show variables like 'datadir';

mysql的日志分類
錯誤日志: -log-err
查詢日志: -log
慢查詢日志: -log-slow-queries
更新日志: -log-update
二進制日志: -log-bin

8.開啟Mysql的操作日志記錄

輸入:

  SHOW VARIABLES LIKE 'log_bin'

開啟錯誤日志:
在my.cnf 或my.ini 中 添加 log-error=/home/mysql/logs/log-error.txt
開啟查詢日志:
在my.cnf 或my.ini 中 添加 log=/home/mysql/logs/mysql_log.txt

9.查看Mysql緩沖池大小

SHOW GLOBAL VARIABLES LIKE 'innodb_buffer_pool_size';

10.當前目錄賦予mysql權限

chown -R mysql:mysql ./

11.查看mysql臟頁比例

USE performance_schema;
SELECT VARIABLE_VALUE INTO @a FROM global_status WHERE VARIABLE_NAME = 'Innodb_buffer_pool_pages_dirty';
SELECT VARIABLE_VALUE INTO @b FROM global_status WHERE VARIABLE_NAME = 'Innodb_buffer_pool_pages_total';
SELECT @a/@b;

要合理的設定 innodb_io_capacity 的值,平時要多關注臟頁比例,不讓其接近 75%.
可以通過 innodb_flush_neighbors 來控制該行為,值為 1 打開上述機制,為 0 則關閉,
對于機械硬碟來說,是可以減少很多隨機 IO ,因為機械硬碟 IOPS 一般就幾百,減少隨機 IO 就意味著性能提升,
但如果用 SSD 這類 IOPS 較高的設備,IOPS 往往不是瓶頸,關閉就好,減少 SQL 陳述句的回應時間,
在 8.0 中,已經默認是 0 了.

12.查看慢查詢以及開啟

SHOW VARIABLES LIKE 'slow_query%';
SET GLOBAL slow_query_log=ON;
set global long_query_time=1;

永久設定

[mysqld]
slow_query_log = ON
slow_query_log_file = /usr/local/mysql/data/slow.log
long_query_time = 1

long_query_time表示查詢超過多少秒就記錄

13. 開啟mysql查詢日志

開啟會降低性能
查看日志配置

SHOW VARIABLES LIKE '%general_log%';

查詢檔案輸出格式

SHOW VARIABLES LIKE 'log_output';

開啟MySQL查詢日志

SET  GLOBAL general_log = ON;

關閉MySQL查詢日志

SET  GLOBAL general_log = OFF;

設定日志輸出方式為表

SET GLOBAL log_output='table';

查詢日志資訊

select * from mysql.general_log;

14.資料庫慢或資料庫連接過多的命令排查

按客戶端 IP 分組,看哪個客戶端的鏈接數最多

SELECT client_ip,COUNT(client_ip) AS client_num FROM (SELECT
SUBSTRING_INDEX(HOST,':' ,1) AS client_ip FROM PROCESSLIST ) AS
connect_info GROUP BY client_ip ORDER BY client_num DESC;

查看正在執行的執行緒,并按 Time 倒排序,看看有沒有執行時間特別長的執行緒

SELECT * FROM information_schema.processlist WHERE Command != 'Sleep'
ORDER BY TIME DESC;

找出所有執行時間超過 5 分鐘的執行緒,拼湊出 kill 陳述句,方便后面查殺

SELECT CONCAT('kill ', id, ';') FROM information_schema.processlist
WHERE Command != 'Sleep' AND TIME > 300 ORDER BY TIME DESC;

批量kill的陳述句

 select concat('KILL ',a.trx_mysql_thread_id ,';') from INFORMATION_SCHEMA.INNODB_LOCKS b,INFORMATION_SCHEMA.innodb_trx a where b.lock_trx_id=a.trx_id into outfile '/tmp/kill.txt';

三、MySql的優化建議

1.建表建議

1.1 選擇索引的資料型別

MySQL支持很多資料型別,選擇合適的資料型別存盤資料對性能有很大的影響,通常來說,可以遵循以下一些指導原則:
1.越小的資料型別通常更好:
越小的資料型別通常在磁盤、記憶體和CPU快取中都需要更少的空間,處理起來更快,
2.簡單的資料型別更好:
整型資料比起字符,處理開銷更小,因為字串的比較更復雜,在MySQL中,應該用內置的日期和時間資料型別,而不是用字串來存盤時間;以及用整型資料型別存盤IP地址,
3.盡量避免NULL:
應該指定列為NOT NULL,除非你想存盤NULL,在MySQL中,含有空值的列很難進行查詢優化,因為它們使得索引、索引的統計資訊以及比較運算更加復雜,你應該用0、一個特殊的值或者一個空串代替空值,
4.一個表的索引最好不要超過6個:
索引固然可以提高相應的 select 的效率,但同時也降低了 insert 及 update 的效率,因為 insert 或 update 時有可能會重建索引

1.2 選擇主鍵型別

選擇合適的識別符號是非常重要的,選擇時不僅應該考慮存盤型別,而且應該考慮MySQL是怎樣進行運算和比較的,一旦選定資料型別,應該保證所有相關的表都使用相同的資料型別,

  1. 整型:
    通常是作為識別符號的最好選擇,因為可以更快的處理,而且可以設定為AUTO_INCREMENT,
  2. 字串:
    盡量避免使用字串作為識別符號,它們消耗更好的空間,處理起來也較慢,而且,通常來說,字串都是隨機的,所以它們在索引中的位置也是隨機的,這會導致頁面分裂、隨機訪問磁盤,聚簇索引分裂(對于使用聚簇索引的存盤引擎),

Mysql常見索引有:主鍵索引、唯一索引、普通索引、全文索引、組合索引
PRIMARY KEY(主鍵索引) ALTER TABLE table_name ADD PRIMARY KEY ( col )
UNIQUE(唯一索引) ALTER TABLE table_name ADD UNIQUE (col)
INDEX(普通索引) ALTER TABLE table_name ADD INDEX index_name (col)
FULLTEXT(全文索引) ALTER TABLE table_name ADD FULLTEXT ( col )
組合索引 ALTER TABLE table_name ADD INDEX index_name (col1, col2, col3 )
Mysql各種索引區別:
普通索引:最基本的索引,沒有任何限制
唯一索引:與"普通索引"類似,不同的就是:索引列的值必須唯一,但允許有空值,
主鍵索引:它 是一種特殊的唯一索引,不允許有空值,
全文索引:僅可用于 MyISAM 表,針對較大的資料,生成全文索引很耗時好空間,
聯合索引:為了更多的提高mysql效率可建立組合索引,遵循”最左前綴“原則,創建復合索引時應該將最常用(頻率)作限制條件的列放在最左邊,依次遞減,
聯合索引的好處:覆寫索引,這一點是最重要的,眾所周知非主鍵索引會先查到主鍵索引的值再從主鍵索引上拿到想要的值,但是覆寫索引可以直接在非主鍵索引上拿到相應的值,減少一次查詢,
復合索引和普通索引都是用一棵B+樹表示的,
如果是單列,就按這列key資料進行排序,
如果是多列,就按多列資料排序,
例如有(1,1)(1,4)(2,2)(1,3) (2,1)(1,2)(2,3) (2,4)
那在索引中的葉子節點的資料順序就是(1,1)(1,2)(1,3) (1,4)(2,1)(2,2)(2,3) (2,4)
這也是為什么查詢復合索引的前綴是可以用到索引的原因

在這里插入圖片描述

1.3 mysql索引方法hash和Btree區別

Hash僅支持=、>、>=、<、<=、between,BTree可以支持like模糊查詢
索引是幫助mysql獲取資料的資料結構,最常見的索引是Btree索引和Hash索引,
不同的引擎對于索引有不同的支持:Innodb和MyISAM默認的索引是Btree索引;而Mermory默認的索引是Hash索引,
我們在mysql中常用兩種索引演算法BTree和Hash,兩種演算法檢索方式不一樣,對查詢的作用也不一樣,
一、BTree
BTree索引是最常用的mysql資料庫索引演算法,因為它不僅可以被用在=,>,>=,<,<=和between這些比較運算子上,而且還可以用于like運算子,只要它的查詢條件是一個不以通配符開頭的常量,例如:
select * from user where name like ‘jack%’;
select * from user where name like ‘jac%k%’;
如果一通配符開頭,或者沒有使用常量,則不會使用索引,例如:
select * from user where name like ‘%jack’;
select * from user where name like simply_name;
二、Hash
Hash索引只能用于對等比較,例如=,<=>(相當于=)運算子,由于是一次定位資料,不像BTree索引需要從根節點到枝節點,最后才能訪問到頁節點這樣多次IO訪問,所以檢索效率遠高于BTree索引,
但為什么我們使用BTree比使用Hash多呢?主要Hash本身由于其特殊性,也帶來了很多限制和弊端:
1.Hash索引僅僅能滿足“=”,“IN”,“<=>”查詢,不能使用范圍查詢,
2.聯合索引中,Hash索引不能利用部分索引鍵查詢,
對于聯合索引中的多個列,Hash是要么全部使用,要么全部不使用,并不支持BTree支持的聯合索引的最優前綴,也就是聯合索引的前面一個或幾個索引鍵進行查詢時,Hash索引無法被利用,
3.Hash索引無法避免資料的排序操作
由于Hash索引中存放的是經過Hash計算之后的Hash值,而且Hash值的大小關系并不一定和Hash運算前的鍵值完全一樣,所以資料庫無法利用索引的資料來避免任何排序運算,
4.Hash索引任何時候都不能避免表掃描
Hash索引是將索引鍵通過Hash運算之后,將Hash運算結果的Hash值和所對應的行指標資訊存放于一個Hash表中,由于不同索引鍵存在相同Hash值,所以即使滿足某個Hash鍵值的資料的記錄條數,也無法從Hash索引中直接完成查詢,還是要通過訪問表中的實際資料進行比較,并得到相應的結果,
5.Hash索引遇到大量Hash值相等的情況后性能并不一定會比BTree高
對于選擇性比較低的索引鍵,如果創建Hash索引,那么將會存在大量記錄指標資訊存于同一個Hash值相關聯,這樣要定位某一條記錄時就會非常麻煩,會浪費多次表資料訪問,而造成整體性能底下,

  1. hash索引查找資料基本上能一次定位資料,當然有大量碰撞的話性能也會下降,而btree索引就得在節點上挨著查找了,很明顯在資料精確查找方面hash索引的效率是要高于btree的;
  2. 那么不精確查找呢,也很明顯,因為hash演算法是基于等值計算的,所以對于“like”等范圍查找hash索引無效,不支持;
  3. 對于btree支持的聯合索引的最優前綴,hash也是無法支持的,聯合索引中的欄位要么全用要么全不用,提起最優前綴居然都泛起迷糊了,看來有時候放空得太厲害;
  4. hash不支持索引排序,索引值和計算出來的hash值大小并不一定一致,

1.4 mysql不走索引的情況

  1. 資料量太少:
    如果表中的行數很少,MySQL可能會選擇全表掃描而不是使用索引,

  2. 索引列被函式處理:
    如果查詢中對索引列進行了函式處理,MySQL就無法使用該索引進行優化,例如:

SELECT * FROM table WHERE YEAR(date_column) = 2021;

將無法使用date_column上的索引進行優化,

  1. 索引列被型別轉換:
    如果查詢中對索引列進行了型別轉換,MySQL也無法使用該索引進行優化,例如:
SELECT * FROM table WHERE int_column = '1';

將無法使用int_column上的索引進行優化,

  1. 索引列被模糊查詢:
    如果查詢中對索引列進行了模糊查詢(如使用LIKE, 非左匹配),MySQL也無法使用該索引進行優化,

  2. 多列索引未使用前綴:
    如果使用了多列索引,并且查詢中只使用了其中的一部分列,但是沒有使用前綴,MySQL也無法使用該索引進行優化,

  3. 索引列存在NULL值:
    如果索引列存在NULL值,MySQL可能無法使用該索引進行優化,

  4. 查詢條件中包含OR、NOT、IN以及子查詢的情況,

  5. 使用聯合索引但是查詢條件順序不正確,

  6. left join 字符集不一致

    這種情況并非常見
    可以通過以下陳述句查看:
    
    SHOW FULL COLUMNS FROM table1;
    SHOW FULL COLUMNS FROM table2;
    

2.查詢優化建議

通過關鍵字 EXPLAIN 在查詢陳述句前面加上可以查看索引走向
從上到下,性能從差到好

  • all 全表查詢
  • index 索引全掃描
  • range 索引范圍掃描
  • ref 使用非唯一或唯一索引的前綴掃描,回傳相同值的記錄
  • eq_ref 使用唯一索引,只回傳一條記錄
  • const,system 單表中最多只有一行匹配,根據唯一索引或主鍵進行查詢
  • null 不訪問表或索引就可以直接得到結果

優化建議:

  • JOIN 后的的條件必須是索引,最好是唯一索引,否則資料一旦很多會直接卡死

  • 一般禁止使用UNIION ON,除非UNION ON 前后的記錄數很少

  • 禁止使用OR

  • 查總數使用COUNT(*)就可以,不需要COUNT(ID),MYSQL會自動優化

  • 資料庫欄位設定 NOT NULL,欄位型別 INT > VARCHAR 越小越好

  • 禁止SELECT * ,需要確定到使用的欄位

  • 一般情況不在SQL中進行數值計算

3. 總數查詢優化 建議

1.如果未設定主鍵,也未設定索引,可以對整型的欄位添加索引
2.通過一個中間表來記錄資料庫內各表記錄總數,然后通過觸發器進行監聽該表,實時更新總條數.

觸發器:
CREATE
TRIGGER 資料庫名.觸發器名 BEFORE/AFTER INSERT/UPDATE/DELETE
ON 資料庫名.<Table Name>
FOR EACH ROW
BEGIN
事件發生后執行的代碼
END

創建示例:
當test_count表添加了資料,就對MT_COUNT的總數進行更新,

DELIMITER $$
CREATE
    TRIGGER `ROWS_COUNT` BEFORE  INSERT
    ON `test_count`
    FOR EACH ROW BEGIN		
	UPDATE MT_COUNT SET rowcount=rowcount+1 WHERE tablename = 'test_count';
    END$$
DELIMITER ;

3.分頁查詢只第一次查詢總數,或者分頁查詢和總數查詢分開,

4.提升MySql寫入速度建議

innodb_buffer_pool_size

如果用Innodb,那么這是一個重要變數,相對于MyISAM來說,Innodb對于buffer
size更敏感,MySIAM可能對于大資料量使用默認的key_buffer_size也還好,但Innodb在大資料量時用默認值就感覺在爬了,
Innodb的緩沖池會快取資料和索引,所以不需要給系統的快取留空間,如果只用Innodb,可以把這個值設為記憶體的70%-80%,和
key_buffer相同,如果資料量比較小也不怎么增加,那么不要把這個值設太高也可以提高記憶體的使用率,

innodb_additional_pool_size

這個的效果不是很明顯,至少是當作業系統能合理分配記憶體時,但你可能仍需要設成20M或更多一點以看Innodb會分配多少記憶體做其他用途,

innodb_log_file_size

對于寫很多尤其是大資料量時非常重要,要注意,大的檔案提供更高的性能,但資料庫恢復時會用更多的時間,一般用64M-512M,具體取決于服務器的空間,

innodb_log_buffer_size

默認值對于多數中等寫操作和事務短的運用都是可以的,如
果經常做更新或者使用了很多blob資料,應該增大這個值,但太大了也是浪費記憶體,因為1秒鐘總會
flush(這個詞的中文怎么說呢?)一次,所以不需要設到超過1秒的需求,8M-16M一般應該夠了,小的運用可以設更小一點,

innodb_flush_log_at_trx_commit (這個很管用)

抱怨Innodb比MyISAM慢
100倍?那么你大概是忘了調整這個值,默認值1的意思是每一次事務提交或事務外的指令都需要把日志寫入(flush)硬碟,這是很費時的,特別是使用電
池供電快取(Battery backed up
cache)時,設成2對于很多運用,特別是從MyISAM表轉過來的是可以的,它的意思是不寫入硬碟而是寫入系統快取,日志仍然會每秒flush到硬
盤,所以你一般不會丟失超過1-2秒的更新,設成0會更快一點,但安全方面比較差,即使MySQL掛了也可能會丟失事務的資料,而值2只會在整個作業系統
掛了時才可能丟資料,

四、MySql遇到的問題以及解決辦法

1. mysql離線安裝出現:Can't change to run as user 'mysql' ; Please check that the user exists!

原因:沒有該用戶,
解決辦法:創建該用戶!
例如:
添加用戶:

groupadd -g 315 mysql

用戶加入mysql:

useradd -u 315 -g mysql -d /usr/local/mysql -M mysql

再次輸入

 ./scripts/mysql_install_db --user=mysql

成功!

2,安裝完mysql之后,輸入service mysql start 提示 mysql: unrecognized service,

問題原因: 是因為/etc/init.d/ 不存在 mysql 這個命令,所以無法識別,
解決辦法:
1.首先查找mysql.server檔案在哪
輸入:
find / -name mysql.server
2.將mysql.server 復制到/etc/init.d/目錄下,并重命名為mysql或mysqld

輸入:
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
3.測驗是否可以使用該命令
輸入:
service mysql status

service mysqld status

3. 打開mysql出現:Got error 28 from storage engine

原因:mysql服務器的存盤空間不夠了,清空不用的資料就可以使用了,

4. Data too long for column 例外

1.資料庫中設定的字符長度不夠

找到對應的欄位,將字符長度加長一些,

2.編碼導致的原因,一般是由于輸入了中文,才會出現類似的錯誤
統一設定為UTF-8

5. Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

登錄出現此例外
原因: 沒有找到該檔案,可以在/etc/my.cnf 檔案中確認該檔案的位置,若確定,這查看此檔案的權限,若權限也ok,則添加 軟鏈,
例如:
ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock

若還不行,則通過 mysql -uroot -p -S /var/run/mysqld/mysqld.sock 直接登錄,不輸入密碼 ,登錄成功之后,在通過添加軟鏈重新啟動,

6. 登錄mysql報錯-bash: mysql: 未找到命令

原因:這是由于系統默認會查找/usr/bin下的命令,如果這個命令不在這個目錄下,當然會找不到命令,我們需要做的就是映射一個鏈接到/usr/bin目錄下,相當于建立一個鏈接檔案,
首先得知道mysql命令或mysqladmin命令的完整路徑,比如mysql的路徑是:/usr/local/mysql/bin/mysql,我們則可以這樣執行命令:

ln -s /usr/local/mysql/bin/mysql /usr/bin

以下是補充:

linux下,在mysql正常運行的情況下,輸入mysql提示:
mysql command not found

遇上-bash: mysql: command not found的情況別著急,這個是因為/usr/local/bin目錄下缺失mysql導致,只需要一下方法建立軟鏈接,即可以解決:
把mysql安裝目錄,比如MYSQLPATH/bin/mysql,映射到/usr/local/bin目錄下:

cd /usr/local/bin
ln -fs /MYSQLPATH/bin/mysql mysql

還有其它常用命令mysqladmin、mysqldump等不可用時候都可按用此方法解決,
注:其中MYSQLPATH是mysql的實際安裝路徑,

7. initialize specified but the data directory has files in it. Aborting

報這個錯誤的原因是因為你的mysql資料庫已經進行初始化了,所以不能用這種方式再進行初始化用戶了,因為mysql在初始化的時候會自動創建一個root用戶的,更改/etc/cnf 的配置就行,

8.The server quit without updating PID file

錯誤資訊詳細描述:
root@MyServer:~# service mysql start
Starting MySQL
..The server quit without updating PID file (/usr/local/mysql/var/MyServer.pid). ... failed!

錯誤解決排查思路:
1.可能是/usr/local/mysql/data/rekfan.pid檔案沒有寫的權限
解決方法 :給予權限,執行 “chown -R mysql:mysql /var/data” “chmod -R 755 /usr/local/mysql/data” 然后重新啟動mysqld!

2.可能行程里已經存在mysql行程
解決方法:用命令“ps -ef|grep mysqld”查看是否有mysqld行程,如果有使用“kill -9 行程號”殺死,然后重新啟動mysqld!

3.可能是第二次在機器上安裝mysql,有殘余資料影響了服務的啟動,
解決方法:去mysql的資料目錄/data看看,如果存在mysql-bin.index,就趕快把它洗掉掉吧,它就是罪魁禍首了,

4.mysql在啟動時沒有指定組態檔時會使用/etc/my.cnf組態檔,請打開這個檔案查看在[mysqld]節下有沒有指定資料目錄(datadir),
解決方法:請在[mysqld]下設定這一行:datadir = /usr/local/mysql/data

5.skip-federated欄位問題
解決方法:檢查一下/etc/my.cnf檔案中有沒有沒被注釋掉的skip-federated欄位,如果有就立即注釋掉吧,

6.錯誤日志目錄不存在
解決方法:使用“chown” “chmod”命令賦予mysql所有者及權限

7.selinux惹的禍,如果是centos系統,默認會開啟selinux
解決方法:關閉它,打開/etc/selinux/config,把SELINUX=enforcing改為SELINUX=disabled后存盤退出重啟機器試試,

9.Failed to start mysql.service: Unit not found. Mysql

systemctl list-unit-files --type=service | grep mysql
service mysqld.service start

在這里插入圖片描述

10.mysqldump: Got error: 1045: Unknown error 1045 when trying to connect

添加雙引號
在這里插入圖片描述

11.mysql 寫入生僻字或特殊字符錯誤的解決辦法

問題: 插入SQ陳述句出現 Incorrect string value: '\xF0\xA1\x8B\xBE\xE5\xA2...' for column 'name',這種錯誤,資料庫編碼設定已經是utf-8 ,插入其他的非特殊字符的陳述句正確,

解決辦法 : mysql 版本5.5.3以后,有了一個utf8mb4編碼,是utf8的超集,也兼容unicode ,所以將編碼格式改為這個就可以了,
在my.cnf或my.ini中添加:

[client]
default-character-set = utf8mb4
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
[mysql]
default-character-set = utf8mb4 

其他

參考:
http://blog.csdn.net/zq199692288/article/details/78863737
https://blog.csdn.net/hjf161105/article/details/78850658
https://blog.csdn.net/everda/article/details/77476716
http://blog.itpub.net/29654823/viewspace-2150471

關于sql相關的文章:
https://www.cnblogs.com/xuwujing/category/1081197.html

非常好聽的音樂~

<iframe frameborder="no" border="0" margin marginheight="0" height="86" src="https://www.cnblogs.com//music.163.com/outchain/player?type=2&id=432792719&auto=0&height=66"></iframe>

原創不易,如果感覺不錯,希望給個推薦!您的支持是我寫作的最大動力!
著作權宣告:
作者:虛無境
博客園出處:http://www.cnblogs.com/xuwujing
CSDN出處:http://blog.csdn.net/qazwsxpcm    
個人博客出處:https://xuwujing.github.io/

如果你對生活感覺到了絕望,請不要氣餒,因為這樣只會讓你更加絕望! 所謂的希望往往都是在絕望中萌發的,所以,請不要放棄希望!

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/551536.html

標籤:MySQL

上一篇:MySQL常用資料庫陳述句

下一篇:返回列表

標籤雲
其他(158353) Python(38110) JavaScript(25398) Java(18011) C(15221) 區塊鏈(8261) C#(7972) AI(7469) 爪哇(7425) MySQL(7154) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5870) 数组(5741) R(5409) Linux(5334) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4565) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2432) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1964) Web開發(1951) HtmlCss(1929) python-3.x(1918) 弹簧靴(1913) C++(1912) xml(1889) PostgreSQL(1874) .NETCore(1857) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • 手記系列之四 ----- 關于使用MySql的經驗

    前言 本篇文章主要介紹的關于本人在使用MySql記錄筆記的一些使用方法和經驗,溫馨提示,本文有點長,約1.5w字,幾十張圖片,建議收藏查看。 一、MySql安裝 下載地址:https://dev.mysql.com/downloads/ 在安裝MySql之前,查看是否以及安裝過MySql,如果已經安 ......

    uj5u.com 2023-05-01 07:59:11 more
  • MySQL常用資料庫陳述句

    ==資料庫==1、創建資料庫create database [IF NOT EXISTS] 資料庫名; 2、洗掉資料庫drop database [IF EXISTS] 資料庫名; 3、切換資料庫select database(); 4、查詢資料庫show databases; —————————— ......

    uj5u.com 2023-04-30 07:59:05 more
  • MySQL常用資料庫陳述句

    ==資料庫==1、創建資料庫create database [IF NOT EXISTS] 資料庫名; 2、洗掉資料庫drop database [IF EXISTS] 資料庫名; 3、切換資料庫select database(); 4、查詢資料庫show databases; —————————— ......

    uj5u.com 2023-04-30 07:58:10 more
  • day08-優惠券秒殺04

    功能03-優惠券秒殺04 4.功能03-優惠券秒殺 4.7Redis優化秒殺 4.7.1優化分析 現在來回顧一下優惠券秒殺業務的兩個主要問題: (1)首先是對優惠券的扣減,需要防止庫存超賣現象; (2)其次,需要對每個用戶下單數量進行限制,實作一人一單的功能。 處理秒殺優惠券的業務: 先根據獲取到的 ......

    uj5u.com 2023-04-29 07:31:59 more
  • day08-優惠券秒殺04

    功能03-優惠券秒殺04 4.功能03-優惠券秒殺 4.7Redis優化秒殺 4.7.1優化分析 現在來回顧一下優惠券秒殺業務的兩個主要問題: (1)首先是對優惠券的扣減,需要防止庫存超賣現象; (2)其次,需要對每個用戶下單數量進行限制,實作一人一單的功能。 處理秒殺優惠券的業務: 先根據獲取到的 ......

    uj5u.com 2023-04-29 07:30:43 more
  • Performance_schema中的主從復制系串列總結

    主從半同步復制是目前用得最多的MySQL復制方案,日常作業中我們一般通過show slave status陳述句查看當前復制程序中狀態資訊,基本上能滿足大多數場景下的需求。Performance_schema中提供了16個關于復制的監控表(包括組復制、過濾復制等,這里我們先不討論),show slav ......

    uj5u.com 2023-04-28 12:15:09 more
  • [20230425]CBO cost與行遷移關系.txt

    [20230425]CBO cost與行遷移關系.txt--//一般現在很少使用analyze table分析表,如果出現大量行遷移是否考慮看看是否考慮cbo cost成本.--//測驗參考鏈接:--//https://richardfoote.wordpress.com/2023/03/21/cb ......

    uj5u.com 2023-04-28 12:15:04 more
  • day07-優惠券秒殺03

    功能03-優惠券秒殺03 4.功能03-優惠券秒殺 4.6Redisson的分布式鎖 Redis分布式鎖—Redisson+RLock可重入鎖實作篇 4.6.1基于setnx實作的分布式鎖問題 我們在4.5自己實作的分布式鎖,主要使用的是redis的setnx命令,它仍存在如下問題: 4.6.2Re ......

    uj5u.com 2023-04-28 12:11:01 more
  • mysql基礎

    SQL陳述句 SQL陳述句分類 SQL分類: 資料定義語言:簡稱DDL(Data Definition Language),用來定義資料庫物件:資料庫,表,列等。關鍵字:create,alter,drop等 資料操作語言:簡稱DML(Data Manipulation Language),用來對資料庫中 ......

    uj5u.com 2023-04-28 12:10:40 more
  • 輕松存盤千億級資料,知憾訓于Doris的DMP系統架構實踐

    1)提升查詢效率



    自動探測 SQL 復雜查詢條件預先合并成一個派生特征的 bitmap,預測和圈人時對復雜條件 SQL 重寫為派生特征。



    2)提升匯入速度



    Spark 直接寫 Doris Tablet 檔案,并掛載到 FE。



    針對大匯入場景與 Doris 團隊共建,提升寫入效... ......

    uj5u.com 2023-04-28 12:10:10 more