MySQL基础(一)介绍和配置
了解數據庫
基本概念
數據庫(database)
數據庫是一個以某種有組織的方式存儲的數據集合,可以將它想象為一個文件柜。只不過它是在計算機的存儲設備上,按照一定的數據模型組織、描述和儲存,具有較小的冗余度、較高的數據獨立性和易擴展性,并可為各種用戶共享。
數據庫管理系統DMBS (Database Management System)
也就是數據庫軟件,用于創建、操作、維護數據庫用的,比如MySQL, oracle, Access等
關系型數據庫(RDBMS)
關系型數據庫需要有表結構,使用SQL作為查詢語言
比如:SQLite , MySQL, DB2, Oracle, Access, SQL Server 等
非關系型數據庫(NoSQL)
NoSQL(Not Only SQL) 非關系型數據庫,是對不同于傳統的關系數據庫的數據庫管理系統的統稱。近年比較火,比起關系型數據庫,性能優勢突出。主要特點是不使用SQL作為查詢語言,不需要表結構。比如我們常用的Redis,就是NoSQL的一種,它按照 key/value RAM 存儲。NoSQL更多分類參考這里
數據庫服務器
就是一臺運行數據庫管理系統的計算機(對內存要求比較高)
表(table)
某種特定類型數據的結構化清單,相當于文件柜中的文件。數據庫中的每張表都必須有唯一的表名來標識自己,比如顧客表,產品表,訂單表等。
列(column)
也稱為表字段(field),表中的每一列存儲著某種特定的信息。比如在顧客表中,一列存儲顧客的編號,另一列存儲顧客的姓名,地址,電話等信息也都存儲在各自的列中。表中的列名(字段名)不能重復。
行(row)
也稱為表記錄(record),表中的數據是按行存儲的。比如顧客表的每行存儲一個顧客。
主鍵(primary key)
用來唯一標識表中的一行的列稱為主鍵。比如顧客表可以使用顧客編號,訂單表可以使用訂單ID。
SQL
結構化查詢語言(Structured Query Language),是一種專門用來和數據庫溝通的語言,用于關系型數據庫管理系統。
具有如下特點:
- 幾乎所有的DBMS都支持SQL,學習它使你幾乎能和任何數據庫打交道。
- 簡單易學,只由很少的描述性很強的英語單詞(關鍵字)組成
- 功能強大。雖然語法簡單,但是靈活使用可以進行非常復雜和高級的數據庫操作。
SQL語言包括三種類型:
- DDL:數據庫定義語言(data definition language),主要的命令有CREATE(創建)、ALTER(修改)、DROP(刪除)等,用于數據庫、表、視圖、索引、存儲過程的定義和管理。
- DML:數據庫操作語言(data manipulation language),對數據庫數據進行操作,比如SELECT(查詢)、UPDATE(更新)、INSERT(插入)、DELETE(刪除)。
- DCL:數據庫控制語言(data control language),用來控制用戶權限,比如GRANT(授權), REVOKE(回收權限)。
SQL語句書寫規范
- 不區分大寫,為了提高可讀性,通常將關鍵字大寫
- 每條SQL語句以;分號作為結束符
- 注釋方式:
- -- 單行注釋
- /* 多行注釋 */
- #,在一行的開始處使用,這一整行都將作為注釋,較少使用
- 子句另起一行,更易于閱讀和調試
其它
更多概念將在后面數據庫的具體使用中了解,比如外鍵,索引等。
MySQL
MySQL是開源的關系型數據庫管理系統,由瑞典MySQL AB 公司開發,目前屬于 Oracle 旗下公司。由于性能高、成本低、可靠性好,已經成為最流行的開源數據庫。
被甲骨文公司收購后,Oracle大幅調漲MySQL商業版的售價,且甲骨文公司不再支持另一個自由軟件項目OpenSolaris的發展,因此導致自由軟件社區們對于Oracle是否還會持續支持MySQL社區版(MySQL之中唯一的免費版本)有所隱憂,MySQL的創始人麥克爾·維德紐斯以MySQL為基礎,成立分支計劃MariaDB。而原先一些使用MySQL的開源軟件逐漸轉向MariaDB或其它的數據庫。例如維基百科已于2013年正式宣布將從MySQL遷移到MariaDB數據庫[2]。
安裝和配置
MySQL本質是基于socket的c/s架構的軟件,因此分為客戶端(mysql)和服務端(mysqld)。這部分用的大昆的,歡迎大家去點贊評論~
注意:Linux系統下的配置文件是my.cnf,windows下的是my.ini,只是擴展名不一樣,其它都是一樣的。
Linux
二進制rpm包安裝
yum -y install mysql-server mysql源碼安裝MySQL
解壓tar包
cd /software tar -xzvf mysql-5.6.21-linux-glibc2.5-x86_64.tar.gz mv mysql-5.6.21-linux-glibc2.5-x86_64 mysql-5.6.21添加用戶與組
groupadd mysql useradd -r -g mysql mysql chown -R mysql:mysql mysql-5.6.21安裝數據庫
su mysql cd mysql-5.6.21/scripts ./mysql_install_db --user=mysql --basedir=/software/mysql-5.6.21 -- datadir=/software/mysql-5.6.21/data配置文件
cd /software/mysql-5.6.21/support-files cp my-default.cnf /etc/my.cnf cp mysql.server /etc/init.d/mysql vim /etc/init.d/mysql #若mysql的安裝目錄是/usr/local/mysql,則可省略此步 # 修改文件中的兩個變更值,解壓目錄和數據目錄 basedir=/software/mysql-5.6.21 datadir=/software/mysql-5.6.21/data配置環境變量
vim /etc/profile export MYSQL_HOME="/software/mysql-5.6.21" export PATH="$PATH:$MYSQL_HOME/bin" source /etc/profile添加自啟動服務
chkconfig --add mysql chkconfig mysql on啟動MySQL
service mysql start登錄、密碼及遠程訪問
mysqladmin -u root password 'your_password' #修改root用戶密碼 mysql -u root -p #登錄mysql,需要輸入密碼 mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'your_password' WITH GRANT OPTION; #允許root用戶遠程訪問 mysql>FLUSH PRIVILEGES; #刷新權限源碼安裝MariaDB
解壓
tar zxvf mariadb-5.5.31-linux-x86_64.tar.gz mv mariadb-5.5.31-linux-x86_64 /usr/local/mysql //必需這樣,很多腳本或可執行程序都會直接訪問這個目錄權限
groupadd mysql //增加 mysql 屬組 useradd -g mysql mysql //增加 mysql 用戶 并歸于mysql 屬組 chown mysql:mysql -Rf /usr/local/mysql // 設置 mysql 目錄的用戶及用戶組歸屬。 chmod +x -Rf /usr/local/mysql //賜予可執行權限拷貝配置文件
cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf //復制默認mysql配置 文件到/etc目錄初始化
/usr/local/mysql/scripts/mysql_install_db --user=mysql //初始化數據庫 cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql //復制mysql服務程序 到系統目錄 chkconfig mysql on //添加mysql 至系統服務并設置為開機啟動 service mysql start //啟動mysql環境變量配置
vim /etc/profile //編輯profile,將mysql的可執行路徑加入系統PATH export PATH=/usr/local/mysql/bin:$PATH source /etc/profile //使PATH生效。賬號密碼
mysqladmin -u root password 'yourpassword' //設定root賬號及密碼 mysql -u root -p //使用root用戶登錄mysql use mysql //切換至mysql數據庫。 select user,host,password from user; //查看系統權限 drop user ''@'localhost'; //刪除不安全的賬戶 drop user root@'::1'; drop user root@127.0.0.1; select user,host,password from user; //再次查看系統權限,確保不安全的賬戶均被刪除。 flush privileges; //刷新權限一些必要的初始配置
修改字符集為UTF8
vi /etc/my.cnf 在[client]下面添加 default-character-set = utf8 在[mysqld]下面添加 character_set_server = utf8增加錯誤日志
vi /etc/my.cnf 在[mysqld]下面添加: log-error = /usr/local/mysql/log/error.log general-log-file = /usr/local/mysql/log/mysql.log設置為不區分大小寫,Linux下默認會區分大小寫。
vi /etc/my.cnf 在[mysqld]下面添加: lower_case_table_name=1修改完之后重啟服務:service mysql restart
Windows
直接在官網下載安裝包,安裝完成后記得添加環境變量:將MySQL的bin目錄路徑加入。
初始化
初始化:mysqld --initialize-insecure
啟動MySQL服務器:mysqld
注冊為服務
- 制作MySQL的Windows服務,在終端的目錄下執行此命令:
"c:\mysql-5.7.16-winx64\bin\mysqld" --install
- 移除MySQL的Windows服務,在終端的目錄下執行此命令:
"c:\mysql-5.7.16-winx64\bin\mysqld" --remove
啟動和關閉MySQL服務
注冊成服務之后,以后再啟動和關閉MySQL服務時,僅需執行如下命令:
啟動MySQL服務
net start mysql
關閉MySQL服務
net stop mysql
連接MySQL服務
mysql -u root -p 啟動MySQL客戶端并連接MySQL服務,接下來會提示輸入密碼。
基本管理
啟動和查看服務
[root@egon ~]# systemctl start mariadb #啟動 [root@egon ~]# systemctl enable mariadb #設置開機自啟動 Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service. [root@egon ~]# ps aux |grep mysqld |grep -v grep #查看進程,mysqld_safe為啟動mysql的腳本文件,內部調用mysqld命令 mysql 3329 0.0 0.0 113252 1592 ? Ss 16:19 0:00 /bin/sh /usr/bin/mysqld_safe --basedir=/usr mysql 3488 0.0 2.3 839276 90380 ? Sl 16:19 0:00 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --log-error=/var/log/mariadb/mariadb.log --pid-file=/var/run/mariadb/mariadb.pid --socket=/var/lib/mysql/mysql.sock [root@egon ~]# netstat -an |grep 3306 #查看端口 tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN [root@egon ~]# ll -d /var/lib/mysql #權限不對,啟動不成功,注意user和group drwxr-xr-x 5 mysql mysql 4096 Jul 20 16:28 /var/lib/mysql錯誤解決
安裝完mysql 之后,登陸以后,不管運行任何命令,總是提示這個
mac mysql error You must reset your password using ALTER USER statement before executing this statement.
解決方法:
登錄和密碼
初始狀態下,管理員root,密碼為空,默認只允許從本機登錄localhost 設置密碼 [root@egon ~]# mysqladmin -uroot password "123" 設置初始密碼 由于原密碼為空,因此-p可以不用 [root@egon ~]# mysqladmin -uroot -p"123" password "456" 修改mysql密碼,因為已經有密碼了,所以必須輸入原密碼才能設置新密碼命令格式: [root@egon ~]# mysql -h172.31.0.2 -uroot -p456 [root@egon ~]# mysql -uroot -p [root@egon ~]# mysql 以root用戶登錄本機,密碼為空windows配置文件
在mysql的解壓目錄下,新建my.ini,然后配置。注意ini文件的注釋用;或者#另起一行,如下:
[xxx] a=a ; 這里是a的注釋 # 這是a的注釋服務端參數
在執行mysqld命令時,下列配置會生效,即mysql服務啟動時生效
[mysqld] port=3306 ;服務端默認監聽(listen on)的TCP/IP端口 character_set_server=utf8 ;數據庫默認字符集 default-storage-engine=innodb innodb_file_per_table=1根目錄
basedir=D:\mysql-5.7.19-winx64data目錄
在執行mysqld --initialize時,就會將初始數據存入此處指定的目錄,在初始化之后,啟動mysql時,就會去這個目錄里找數據
datadir=D:\my_data客戶端全局配置
[client] port=3306 default-character-set=utf8 user=root password=123客戶端局部配置
[mysql] ;port=3306 ;default-character-set=utf8 user=egon password=4573如果沒有配置[mysql],則用戶在執行mysql命令時的配置以[client]為準
字符編碼
[mysqld] character-set-server=utf8 collation-server=utf8_general_ci [client] default-character-set=utf8 [mysql] default-character-set=utf8MySQL配置一覽
從網上摘錄的,供有興趣的查閱用。
目錄和文件
| character-sets-dir = path | 給出存放著字符集的目錄。 |
| datadir = path | 從給定目錄讀取數據庫文件。 |
| pid-file = filename | 為mysqld程序指定一個存放進程ID的文件(僅適用于UNIX/Linux系統); Init-V腳本需要使用這個文件里的進程ID結束mysqld進程。 |
| socket = filename | 為MySQL客戶程序與服務器之間的本地通信指定一個套接字文件(僅適用于UNIX/Linux系統; 默認設置一般是/var/lib/mysql/mysql.sock文件)。在Windows環境下,如果MySQL客戶與服務器是通過命名管道進行通信 的,–sock選項給出的將是該命名管道的名字(默認設置是MySQL)。 |
| lower_case_table_name = 1/0 | 新目錄和數據表的名字是否只允許使用小寫字母; 這個選項在Windows環境下的默認設置是1(只允許使用小寫字母)。 |
mysqld程序:語言設置
| collation-server = name | 新數據庫或數據表的默認排序方式。 |
| lanuage = name | 用指定的語言顯示出錯信息。 |
mysqld程序:通信、網絡、信息安全
| local-infile [=0] | 允許/禁止使用LOAD DATA LOCAL語句來處理本地文件。 |
| myisam-recover [=opt1, opt2, …] | 在啟動時自動修復所有受損的MyISAM數據表。這個選項的可取值有4種:DEFAULT、BACKUP、QUICK和FORCE; 它們與myisamchk程序的同名選項作用相同。 |
| old-passwords | 使用MySQL 3.23和4.0版本中的老算法來加密mysql數據庫里的密碼(默認使用MySQL 4.1版本開始引入的新加密算法)。 |
| port = n | 為MySQL程序指定一個TCP/IP通信端口(通常是3306端口)。 |
| safe-user-create | 只有在mysql.user數據庫表上擁有INSERT權限的用戶才能使用GRANT命令; 這是一種雙保險機制(此用戶還必須具備GRANT權限才能執行GRANT命令)。 |
| shared-memory | 允許使用內存(shared memory)進行通信(僅適用于Windows)。 |
| shared-memory-base-name = name | 給共享內存塊起一個名字(默認的名字是MySQL)。 |
| skip-grant-tables | 不使用mysql數據庫里的信息來進行訪問控制(警告:這將允許用戶任何用戶去修改任何數據庫)。 |
| skip-host-cache | 不使用高速緩存區來存放主機名和IP地址的對應關系。 |
| skip-name-resovle | 不把IP地址解析為主機名; 與訪問控制(mysql.user數據表)有關的檢查全部通過IP地址行進。 |
| skip-networking | 只允許通過一個套接字文件(Unix/Linux系統)或通過命名管道(Windows系統)進行本地連接,不允許ICP/IP連接; 這提高了安全性,但阻斷了來自網絡的外部連接和所有的Java客戶程序(Java客戶即使在本地連接里也使用TCP/IP)。 |
| user = name | mysqld程序在啟動后將在給定UNIX/Linux賬戶下執行; mysqld必須從root賬戶啟動才能在啟動后切換到另一個賬戶下執行; mysqld_safe腳本將默認使用–user=mysql選項來啟動mysqld程序。 |
mysqld程序:內存管理、優化、查詢緩存區
| key_buffer_size = n | 用來存放索引區塊的RMA值(默認設置是8M)。 |
| join_buffer_size = n | 在參加JOIN操作的數據列沒有索引時為JOIN操作分配的緩存區長度(默認設置是128K)。 |
| max_heap_table_size = n | HEAP數據表的最大長度(默認設置是16M); 超過這個長度的HEAP數據表將被存入一個臨時文件而不是駐留在內存里。 |
| max_connections = n | MySQL服務器同時處理的數據庫連接的最大數量(默認設置是100)。 |
| query_cache_limit = n | 允許臨時存放在查詢緩存區里的查詢結果的最大長度(默認設置是1M)。 |
| query_cache_size = n | 查詢緩存區的最大長度(默認設置是0,不開辟查詢緩存區)。 |
| query_cache_type = 0/1/2 | 查詢緩存區的工作模式:0, 禁用查詢緩存區; 1,啟用查詢緩存區(默認設置); 2,”按需分配”模式,只響應SELECT SQL_CACHE命令。 |
| read_buffer_size = n | 為從數據表順序讀取數據的讀操作保留的緩存區的長度(默認設置是128KB); 這個選項的設置值在必要時可以用SQL命令SET SESSION read_buffer_size = n命令加以改變。 |
| read_rnd_buffer_size = n | 類似于read_buffer_size選項,但針對的是按某種特定順序(比如使用了ORDER BY子句的查詢)輸出的查詢結果(默認設置是256K)。 |
| sore_buffer = n | 為排序操作分配的緩存區的長度(默認設置是2M); 如果這個緩存區太小,則必須創建一個臨時文件來進行排序。 |
| table_cache = n | 同時打開的數據表的數量(默認設置是64)。 |
| tmp_table_size = n | 臨時HEAP數據表的最大長度(默認設置是32M); 超過這個長度的臨時數據表將被轉換為MyISAM數據表并存入一個臨時文件。 |
mysqld程序:日志
| log-slow-queries [= file] | 把執行用時超過long_query_time變量值的查詢命令記入日志(慢查詢日志); 如果沒有給出file參數,MySQL將在數據庫目錄里創建一個hostname-slow.log文件作為這種日志文件(hostname是服務器主機 名)。 |
| long_query_time = n | 慢查詢的執行用時上限(默認設置是10s)。 |
| long_queries_not_using_indexs | 把慢查詢以及執行時沒有使用索引的查詢命令全都記入日志(其余同–log-slow-queries選項)。 |
| log-bin [= filename] | 把對數據進行修改的所有SQL命令(也就是INSERT、UPDATE和DELETE命令)以二進制格式記入日志(二進制變更日志,binary update log)。這種日志的文件名是filename.n或默認的hostname.n,其中n是一個6位數字的整數(日志文件按順序編號)。 |
| log-bin-index = filename | 二進制日志功能的索引文件名。在默認情況下,這個索引文件與二進制日志文件的名字相同,但后綴名是.index而不是.nnnnnn。 |
| max_binlog_size = n | 二進制日志文件的最大長度(默認設置是1GB)。在前一個二進制日志文件里的信息量超過這個最大長度之前,MySQL服務器會自動提供一個新的二進制日志文件接續上。 |
| binlog-do-db = dbname | 只把給定數 據庫里的變化情況記入二進制日志文件,其他數據庫里的變化情況不記載。如果需要記載多個數據庫里的變化情況,就必須在配置文件使用多個本選項來設置,每個數據庫一行。 |
| binlog-ignore-db = dbname | 不把給定數據庫里的變化情況記入二進制日志文件。 |
| sync_binlog = n | 每經過n次日志寫操作就把日志文件寫入硬盤一次(對日志信息進行一次同步)。n=1是最安全的做法,但效率最低。默認設置是n=0,意思是由操作系統來負責二進制日志文件的同步工作。 |
| log-update [= file] | 記載出錯情況的日志文件名(出錯日志)。這種日志功能無法禁用。如果沒有給出file參數,MySQL會使用hostname.err作為種日志文件的名字。 |
mysqld程序:鏡像(主控鏡像服務器)
| log-bin = name | 啟用二進制日志功能。這種日志的文件名是filename.n或默認的hostname.n,其中的n是一個6位數字的整數(日志文件順序編號)。 |
| binlog-do/ignore-db = dbname | 只把給定數據庫里的變化情況記入二進制日志文件/不把給定的數據庫里的變化記入二進制日志文件。 |
mysqld程序:鏡像(從屬鏡像服務器)
| log-slave-updates | 啟用從屬服務器上的日志功能,使這臺計算機可以用來構成一個鏡像鏈(A->B->C)。 |
| master-host = hostname | 主控服務器的主機名或IP地址。如果從屬服務器上存在mater.info文件(鏡像關系定義文件),它將忽略此選項。 |
| master-user = replicusername | 從屬服務器用來連接主控服務器的用戶名。如果從屬服務器上存在mater.info文件,它將忽略此選項。 |
| master-password = passwd | 從屬服務器用來連接主控服務器的密碼。如果從屬服務器上存在mater.info文件,它將忽略此選項。 |
| master-port = n | 從屬服務器用來連接主控服務器的TCP/IP端口(默認設置是3306端口)。 |
| master-connect-retry = n | 如果與主控服務器的連接沒有成功,則等待n秒(s)后再進行管理方式(默認設置是60s)。如果從屬服務器存在mater.info文件,它將忽略此選項。 |
| master-ssl-xxx = xxx | 對主、從服務器之間的SSL通信進行配置。 |
| read-only = 0/1 | 0: 允許從屬服務器獨立地執行SQL命令(默認設置); 1: 從屬服務器只能執行來自主控服務器的SQL命令。 |
| read-log-purge = 0/1 | 1: 把處理完的SQL命令立刻從中繼日志文件里刪除(默認設置); 0: 不把處理完的SQL命令立刻從中繼日志文件里刪除。 |
| replicate-do-table = dbname.tablename | 與–replicate-do-table選項的含義和用法相同,但數據庫和數據庫表名字里允許出現通配符”%” (例如: test%.%–對名字以”test”開頭的所有數據庫里的所以數據庫表進行鏡像處理)。 |
| replicate-do-db = name | 只對這個數據庫進行鏡像處理。 |
| replicate-ignore-table = dbname.tablename | 不對這個數據表進行鏡像處理。 |
| replicate-wild-ignore-table = dbn.tablen | 不對這些數據表進行鏡像處理。 |
| replicate-ignore-db = dbname | 不對這個數據庫進行鏡像處理。 |
| replicate-rewrite-db = db1name > db2name | 把主控數據庫上的db1name數據庫鏡像處理為從屬服務器上的db2name數據庫。 |
| report-host = hostname | 從屬服務器的主機名; 這項信息只與SHOW SLAVE HOSTS命令有關–主控服務器可以用這條命令生成一份從屬服務器的名單。 |
| slave-compressed-protocol = 1 | 主、從服務器使用壓縮格式進行通信–如果它們都支持這么做的話。 |
| slave-skip-errors = n1, n2, …或all | 即使發生出錯代碼為n1、n2等的錯誤,鏡像處理工作也繼續進行(即不管發生什么錯誤,鏡像處理工作也繼續進行)。如果配置得當,從屬服務器不應 該在執行 SQL命令時發生錯誤(在主控服務器上執行出錯的SQL命令不會被發送到從屬服務器上做鏡像處理); 如果不使用slave-skip-errors選項,從屬服務器上的鏡像工作就可能因為發生錯誤而中斷,中斷后需要有人工參與才能繼續進行。 |
mysqld–InnoDB:基本設置、表空間文件
| innodb-file-per-table | 為每一個新數據表創建一個表空間文件而不是把數據表都集中保存在中央表空間里(后者是默認設置)。該選項始見于MySQL 4.1。 |
| innodb-open-file = n | InnoDB數據表驅動程序最多可以同時打開的文件數(默認設置是300)。如果使用了innodb-file-per-table選項并且需要同時打開很多數據表的話,這個數字很可能需要加大。 |
| innodb_data_home_dir = p | InnoDB主目錄,所有與InnoDB數據表有關的目錄或文件路徑都相對于這個路徑。在默認的情況下,這個主目錄就是MySQL的數據目錄。 |
| innodb_data_file_path = ts | 用來容納InnoDB為數據表的表空間: 可能涉及一個以上的文件; 每一個表空間文件的最大長度都必須以字節(B)、兆字節(MB)或千兆字節(GB)為單位給出; 表空間文件的名字必須以分號隔開; 最后一個表空間文件還可以帶一個autoextend屬性和一個最大長度(max:n)。例如,ibdata1:1G; ibdata2:1G:autoextend:max:2G的意思是: 表空間文件ibdata1的最大長度是1GB,ibdata2的最大長度也是1G,但允許它擴充到2GB。除文件名外,還可以用硬盤分區的設置名來定義表 空間,此時必須給表空間的最大初始長度值加上newraw關鍵字做后綴,給表空間的最大擴充長度值加上raw關鍵字做后綴(例如/dev/hdb1: 20Gnewraw或/dev/hdb1:20Graw); MySQL 4.0及更高版本的默認設置是ibdata1:10M:autoextend。 |
| innodb_autoextend_increment = n | 帶有autoextend屬性的表空間文件每次加大多少兆字節(默認設置是8MB)。這個屬性不涉及具體的數據表文件,那些文件的增大速度相對是比較小的。 |
| innodb_lock_wait_timeout = n | 如果某個事務在等待n秒(s)后還沒有獲得所需要的資源,就使用ROLLBACK命令放棄這個事務。這項設置對于發現和處理未能被InnoDB數據表驅動 程序識別出來的死鎖條件有著重要的意義。這個選項的默認設置是50s。 |
| innodb_fast_shutdown 0/1 | 是否以最快的速度關閉InnoDB,默認設置是1,意思是不把緩存在INSERT緩存區的數據寫入數據表,那些數據將在MySQL服務器下次啟動 時再寫入 (這么做沒有什么風險,因為INSERT緩存區是表空間的一個組成部分,數據不會丟失)。把這個選項設置為0反面危險,因為在計算機關閉時,InnoDB 驅動程序很可能沒有足夠的時間完成它的數據同步工作,操作系統也許會在它完成數據同步工作之前強行結束InnoDB,而這會導致數據不完整。 |
mysqld程序:InnoDB–日志
| innodb_log_files_in_group = n | 使用多少個日志文件(默認設置是2)。InnoDB數據表驅動程序將以輪轉方式依次填寫這些文件; 當所有的日志文件都寫滿以后,之后的日志信息將寫入第一個日志文件的最大長度(默認設置是5MB)。這個長度必須以MB(兆字節)或GB(千兆字節)為單 位進行設置。 |
| innodb_flush_log_at_trx_commit = 0/1/2 | 這個選項決定著什么時候把日志信息寫入日志文件以及什么時候把這些文件物理地寫(術語稱為”同步”)到硬盤上。設置值0的意思是每隔一秒寫一次日 志并進行 同步,這可以減少硬盤寫操作次數,但可能造成數據丟失; 設置值1(設置設置)的意思是在每執行完一條COMMIT命令就寫一次日志并進行同步,這可以防止數據丟失,但硬盤寫操作可能會很頻繁; 設置值2是一般折衷的辦法,即每執行完一條COMMIT命令寫一次日志,每隔一秒進行一次同步。 |
| innodb_flush_method = x | InnoDB日志文件的同步辦法(僅適用于UNIX/Linux系統)。這個選項的可取值有兩種: fdatasync,用fsync()函數進行同步; O_DSYNC,用O_SYNC()函數進行同步。 |
| innodb_log_archive = 1 | 啟用InnoDB驅動程序的archive(檔案)日志功能,把日志信息寫入ib_arch_log_n文件。啟用這種日志功能在InnoDB與 MySQL一起使用時沒有多大意義(啟用MySQL服務器的二進制日志功能就足夠用了)。 |
mysqld程序–InnoDB:緩存區的設置和優化
| innodb_log_buffer_size = n | 事務日志文件寫操作緩存區的最大長度(默認設置是1MB)。 |
| innodb_additional_men_pool_size = n | 為用于內部管理的各種數據結構分配的緩存區最大長度(默認設置是1MB)。 |
| innodb_file_io_threads = n | I/O操作(硬盤寫操作)的最大線程個數(默認設置是4)。 |
| innodb_thread_concurrency = n | InnoDB驅動程序能夠同時使用的最大線程個數(默認設置是8)。 |
mysqld程序:其它選項
| default-storage-engine = type | 新數據表的默認數據表類型(默認設置是MyISAM)。這項設置還可以通過–default-table-type選項來設置。 |
| default-timezone = name | 為MySQL服務器設置一個地理時區(如果它與本地計算機的地理時區不一樣)。 |
| ft_min_word_len = n | 全文索引的最小單詞長度工。這個選項的默認設置是4,意思是在創建全文索引時不考慮那些由3個或更少的字符構建單詞。 |
| Max-allowed-packet = n | 客戶與服務器之間交換的數據包的最大長度,這個數字至少應該大于客戶程序將要處理的最大BLOB塊的長度。這個選項的默認設置是1MB。 |
| Sql-mode = model1, mode2, … | MySQL將運行在哪一種SQL模式下。這個選項的作用是讓MySQL與其他的數據庫系統保持最大程度的兼容。這個選項的可取值包括ansi、db2、 oracle、no_zero_date、pipes_as_concat。 |
總結
以上是生活随笔為你收集整理的MySQL基础(一)介绍和配置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深入理解PHP中赋值与引用
- 下一篇: SQL-10 获取所有非manager的