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