MySQL學習筆記第9課(共10課)

2021-07-16 13:18:26 字數 2163 閱讀 2371

40、複製

一種高可用、高效能的解決方案,一般用來建立大型的應用。

三個步驟:

(1)主伺服器把資料更新記錄到二進位制日誌中

(2)從伺服器把主伺服器的二進位制日誌拷貝到自己的中繼日誌中

(3)從伺服器重做日誌中的時間,把更新應用到自己的資料庫上

mysql的複製是非同步同步的,並非完全的主從同步。

從伺服器上可以啟動read-only選項:

[mysqld]

read-only

快照+複製的備份架構

41、效能調優

(1)選擇合適的cpu

資料庫應用一般分為兩類:

innodb儲存引擎一般都使用於oltp的資料庫應用:

使用者操作的併發量大

事務處理的時間一般比較短

查詢的語句較簡單,一般都走索引

複雜的查詢較少

olap是cpu密集型的操作

oltp是io密集型的操作

採購裝置時要注意提高io的配置

如果cpu支援多核,innodb plugin是更好的選擇。另外,如果你的cpu是多核,可以通過改變引數innodb_read_io_threads和innodb_write_io_threads來增大io的執行緒,這樣也能更充分利用cpu的多核效能。

(2)記憶體的重要性

(3)硬碟對資料庫效能的影響

傳統機械硬碟

固態硬碟

(4)合理地設定raid

raid基本思想:就是把多個相對便宜的磁碟組合起來,成為乙個磁碟陣列,使效能達到甚至超過乙個**昂貴、容量巨大的硬碟。

raid的作用是:

增強資料整合度

增強容錯功能

增加處理量或容量

(5)作業系統的選擇也很重要

(6)不同檔案系統對資料庫效能的影響

(7)選擇合適的基準測試工具

mysql提供了一些比較優秀的工具:sysbench和mysql-tpcc

42、linux的大小寫

linux下mysql安裝完後是預設:

1、區分表名的大小寫,不區分列名的大小寫;

2、用root帳號登入後,在/etc/my.cnf 中的[mysqld]後新增新增lower_case_table_names=1,重啟mysql服務,這時已設定成功:不區分表名的大小寫;

lower_case_table_names引數詳解:lower_case_table_names = 0其中 0:區分大小寫,1:不區分大小寫。

mysql在linux下資料庫名、表名、列名、別名大小寫規則是這樣的:

1、資料庫名與表名是嚴格區分大小寫的;

2、表的別名是嚴格區分大小寫的;

3、列名與列的別名在所有的情況下均是忽略大小寫的;

4、變數名也是嚴格區分大小寫的;

mysql在windows下都不區分大小寫。

3、如果想在查詢時區分字段值的大小寫,則:字段值需要設定binary屬性,設定的方法有多種:

a、建立時設定:

create table t(a varchar(10) binary);

b、使用alter修改:alter table `tablename` modify column `cloname` varchar(45) binary;

c、mysql table editor中直接勾選binary項。

在linux環境中的mysql預設設定下,資料庫和表名是區分大小寫的,但在windows中,mysql的資料庫和表名是不區分大小寫的。

(1)在任何系統中可以使用lower_case_tables_name=1。使用該選項的不利之處是當使用show tables或show databases時,看不出名字原來是用大寫還是小寫。

(2) 在linux中使用lower_case_tables_name=0,在windows中使用lower_case_tables_name=2。這樣了可以保留資料庫名和表名的大小寫。不利之處是必須確保在windows中查詢總是用正確大小寫引用資料庫名和表名。如果將查詢轉移到linux中,由於在linux中大小寫很重要,如果大小寫不正確,它們不工作。

例外:如果使用innodb表,在任何平台上均應將lower_case_tables_name設定為1,以強制將名轉換為小寫。

請注意在linux中將lower_case_tables_name設定為1之前,重啟mysqld之前,必須先將舊的資料庫名和表名轉換為小寫。

MySQL學習筆記第6課(共10課)

31 提交的sql語句 以下的sql語句會產生乙個隱式的提交操作,即執行語句後,會有乙個隱式的commit操作。另外注意的是,truncate table語句是ddl,因此雖然和delete整張表的結果是一樣的,但是它不能被回滾。32 對於事務操作的統計 考慮每秒事務處理的能力 tps transa...

python基礎教程共60課 第9課random

python基礎教程共60課 第9課random python 第9課 random 之前我們用了很多次的print和input方法,它們的作用是實現控制台的輸入和輸出。除此之外,python還提供了很多模組,用來實現各種常見的功能,比如時間處理 科學計算 網路請求 隨機數等等等等。今天我就來說說,...

MySQL學習筆記1 0

1.這兩種日誌有以下三點不同。redo log 是 innodb 引擎特有的 binlog 是 mysql 的 server 層實現的,所有引擎都可以使用。2.redo log 是物理日誌,記錄的是 在某個資料頁上做了什麼修改 binlog 是邏輯日誌,記錄的是這個語句的原始邏輯。3.redo lo...