MySQL入門
mysql是目前最流行的關系型數據庫管理系統,在WEB應用方面MySQL是最好的RDBMS(Relational Database Management System:關系數據庫管理系統)應用軟件之一。 國內淘寶網站就使用的是mysql集群
什么是數據庫?
在了解關系型數據庫之前我們要先了解什么是數據庫
數據庫簡單來說就是一個存放我們的數據的地方,如果大家看電視有留意到一些檔案室的話,就會知道檔案室里面存放了非常多的數據,數據庫的作用就跟檔案室和一樣的都是存放數據的,只不過我們的數據庫它是把數據存放到電腦當中的,他會把所有的記錄到數據當中。
總結
數據庫就是一個按照數據結構來組織,存儲和管理數據的倉庫
mysql數據庫
MySQL是一個關系型數據庫管理系統,由瑞典MySQL AB公司開發,目前屬於Oracle公司。MySQL是一種關聯數據庫管理系統,關聯數據庫將數據保存在不同的表中,而不是將所有數據放在一個大倉庫內,這樣就增加了速度並提高了靈活性。
mysql特點
- mysql有開源版本和收費版本,你使用開源版本是不收費的
- mysql支持大型數據庫,可以處理上千萬記錄的大型數據庫
- Mysql使用標准的SQL數據庫語言形式
- Mysql在很多系統上面都支持
- Mysql對PHP,PYTHON都有很好的支持當然其他的語言也支持比如JAVA,C
- Mysql是可以定制的,采用了GPL協議,你可以修改源碼來開發自己的Mysql系統。
關系型數據庫的術語
- 數據庫: 數據庫是關聯表的集合,一個庫里面可以有很多表
- 數據表: 表是數據的矩陣。在一個數據庫中的表看起來像一個簡單的電子表格。
- 列: 一列(數據元素) 包含了相同的數據, 例如郵政編碼的數據。
- 行:一行(=元組,或記錄)是一組相關的數據,例如一條用戶訂閱的數據。
- 冗余:存儲兩倍數據,冗余降低了性能,但提高了數據的安全性。
- 主鍵:主鍵是唯一的。一個數據表中只能包含一個主鍵。你可以使用主鍵來查詢數據。
- 外鍵:外鍵用於關聯兩個表。
- 復合鍵:復合鍵(組合鍵)將多個列作為一個索引鍵,一般用於復合索引。
- 索引:使用索引可快速訪問數據庫表中的特定信息。索引是對數據庫表中一列或多列的值進行排序的一種結構。類似於書籍的目錄。
- 參照完整性: 參照的完整性要求關系中不允許引用不存在的實體。與實體完整性是關系模型必須滿足的完整性約束條件,目的是保證數據的一致性。
mysql安裝
在學習的時候推薦大家用yum安裝因為簡單
yum -y install mysql mysql-server
-
安裝完成后需要初始化數據庫:
/etc/init.d/mysqld start
初始化成功按照提示我們開始設置密碼
/usr/bin/mysqladmin -u root password 'zhiliaoawen'
- 登錄mysql
登錄命令:mysql -uroot -p'password'
mysql的開啟和關閉
Ubuntu:
開啟 service mysql start
狀態 service mysql status
關閉 service mysql stop
mysql shell的使用
命令 | 作用 |
---|---|
\h | 查看幫助信息 |
show processlist; | 查看數據庫的連接數 |
status | 查看數據庫的狀態 |
show databases; | 查看所有數據庫的列表 |
use 數據庫名 | 進入數據庫 |
mysql命令的參數
參數 | 含義 |
---|---|
-h | 主機名 |
-u | 用戶名 |
-p | 密碼 |
-P | 端口 |
-s | 去邊框 |
-S | 執行服務端的socket |
-e | 在shell中執行mysql的命令 |
-N | 去標題 |
-H | 使用html格式導出 |
-X | 使用XML的格式導出 |
更多選項請使用命令:
mysql --help
mysql配置文件
mysql配置文件有非常多,這邊給大家看一些常用的就可以了
centos中文件路徑 /etc/my.cnf
Ubuntu中文件路徑 /etc/mysql/mysql.conf.d/mysqld.cnf
[client]
port = 3306 #clinet連接mysql默認的端口
socket = /tmp/mysql.sock #socket文件的位置
[mysqld]
port = 3306 #mysql開發的socket端口
socket = /tmp/mysql.sock #指定mysql.sock的文件
skip-external-locking #MySQL選項以避免外部鎖定。該選項默認開啟
skip-name-resolve #禁止MySQL對外部連接進行DNS解析,使用這一選項可以消除MySQL進行DNS解析的時間。但需要注意,如果開啟該選項,則所有遠程主機連接授權都要使用IP地址方式,否則MySQL將無法正常處理連接請求
key_buffer_size = 16M #指定用於索引的緩沖區大小,增加它可得到更好處理的索引(對所有讀和多重寫),到你能負擔得起那樣多。如果你使它太大,系統將開始換頁並且真的變慢了。對於內存在4GB左右的服務器該參數可設置為384M或512M。
max_allowed_packet = 64M #接受的數據包大小;增加該變量的值十分安全,這是因為僅當需要時才會分配額外內存。例如,僅當你發出長查詢或MySQLd必須返回大的結果行時MySQLd才會分配更多內存。該變量之所以取較小默認值是一種預防措施,以捕獲客戶端和服務器之間的錯誤信息包,並確保不會因偶然使用大的信息包而導致內存溢出。
table_open_cache = 512 # MySQL每打開一個表,都會讀入一些數據到table_open_cache緩存中,當MySQL在這個緩存中找不到相應信息時,才會去磁盤上讀取。當把table_open_cache設置為很大時,如果系統處理不了那么多文件描述符,那么就會出現客戶端失效,連接不上
sort_buffer_size = 512K # MySQL執行排序使用的緩沖大小。如果想要增加ORDER BY的速度,首先看是否可以讓MySQL使用索引而不是額外的排序階段。 如果不能,可以嘗試增加sort_buffer_size變量的大小
net_buffer_length = 64K
read_buffer_size = 256K # MySQL讀入緩沖區大小。對表進行順序掃描的請求將分配一個讀入緩沖區,MySQL會為它分配一段內存緩沖區。read_buffer_size變量控制這一緩沖區的大小
read_rnd_buffer_size = 512K # MySQL的隨機讀緩沖區大小。當按任意順序讀取行時(例如,按照排序順序),將分配一個隨機讀緩存區。進行排序查詢時,MySQL會首先掃描一遍該緩沖,以避免磁盤搜索,提高查詢速度,如果需要排序大量數據,可適當調高該值。但MySQL會為每個客戶連接發放該緩沖空間,所以應盡量適當設置該值,以避免內存開銷過大
myisam_sort_buffer_size = 8M # MyISAM設置恢復表之時使用的緩沖區的尺寸,當在REPAIR TABLE或用CREATE INDEX創建索引或ALTER TABLE過程中排序 MyISAM索引分配的緩沖區
log-bin=mysql-bin #開啟binlog日志
binlog_format=mixed #開啟binlog日志
server-id = 1 #表示是本機的序號為1,一般來講就是master的意思
innodb_file_per_table=1
# InnoDB為獨立表空間模式,每個數據庫的每個表都會生成一個數據空間
# 獨立表空間優點:
# 1.每個表都有自已獨立的表空間。
# 2.每個表的數據和索引都會存在自已的表空間中。
# 3.可以實現單表在不同的數據庫中移動。
# 4.空間可以回收(除drop table操作處,表空不能自已回收)
# 缺點:
# 單表增加過大,如超過100G
# 結論:
# 共享表空間在Insert操作上少有優勢。其它都沒獨立表空間表現好。當啟用獨立表空間時,請合理調整 innodb_open_files
#innodb_open_files = 500
# 限制Innodb能打開的表的數據,如果庫里的表特別多的情況,請增加這個。這個值默認是300
innodb_file_format_check = 1
innodb_file_format=barracuda
innodb_strict_mode=1
innodb_data_home_dir = /data/mysql/data
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /data/mysql/data
innodb_buffer_pool_size = 686M
# InnoDB使用一個緩沖池來保存索引和原始數據, 不像MyISAM.
# 這里你設置越大,你在存取表里面數據時所需要的磁盤I/O越少.
# 在一個獨立使用的數據庫服務器上,你可以設置這個變量到服務器物理內存大小的80%
# 不要設置過大,否則,由於物理內存的競爭可能導致操作系統的換頁顛簸.
# 注意在32位系統上你每個進程可能被限制在 2-3.5G 用戶層面內存限制,
# 所以不要設置的太高.
innodb_additional_mem_pool_size = 2M
innodb_log_file_size = 300M
# 此參數確定數據日志文件的大小,更大的設置可以提高性能,但也會增加恢復故障數據庫所需的時間
innodb_log_buffer_size = 8M
# 此參數確定些日志文件所用的內存大小,以M為單位。緩沖區更大能提高性能,但意外的故障將會丟失數據。MySQL開發人員建議設置為1-8M之間
innodb_flush_log_at_trx_commit = 2
# 0:如果innodb_flush_log_at_trx_commit的值為0,log buffer每秒就會被刷寫日志文件到磁盤,提交事務的時候不做任何操作(執行是由mysql的master thread線程來執行的。
# 主線程中每秒會將重做日志緩沖寫入磁盤的重做日志文件(REDO LOG)中。不論事務是否已經提交)默認的日志文件是ib_logfile0,ib_logfile1
# 1:當設為默認值1的時候,每次提交事務的時候,都會將log buffer刷寫到日志。
# 2:如果設為2,每次提交事務都會寫日志,但並不會執行刷的操作。每秒定時會刷到日志文件。要注意的是,並不能保證100%每秒一定都會刷到磁盤,這要取決於進程的調度。
# 每次事務提交的時候將數據寫入事務日志,而這里的寫入僅是調用了文件系統的寫入操作,而文件系統是有 緩存的,所以這個寫入並不能保證數據已經寫入到物理磁盤
# 默認值1是為了保證完整的ACID。當然,你可以將這個配置項設為1以外的值來換取更高的性能,但是在系統崩潰的時候,你將會丟失1秒的數據。
# 設為0的話,mysqld進程崩潰的時候,就會丟失最后1秒的事務。設為2,只有在操作系統崩潰或者斷電的時候才會丟失最后1秒的數據。InnoDB在做恢復的時候會忽略這個值。
# 總結
# 設為1當然是最安全的,但性能頁是最差的(相對其他兩個參數而言,但不是不能接受)。如果對數據一致性和完整性要求不高,完全可以設為2,如果只最求性能,例如高並發寫的日志服務器,設為0來獲得更高性能
innodb_lock_wait_timeout = 50
# InnoDB事務在被回滾之前可以等待一個鎖定的超時秒數。InnoDB在它自己的鎖定表中自動檢測事務死鎖並且回滾事務。InnoDB用LOCK TABLES語句注意到鎖定設置。默認值是50秒
default-storage-engine=INNODB #默認存儲引擎
basedir=/usr/local/services/mysql #安裝路徑
datadir=/data/mysql/data #mysql存放數據的目錄
character-set-server = utf8 #設置數據的默認字符編碼集
wait_timeout=2880000
# 服務器關閉非交互連接之前等待活動的秒數。在線程啟動時,根據全局wait_timeout值或全局interactive_timeout值初始化會話wait_timeout值,
# 取決於客戶端類型(由mysql_real_connect()的連接選項CLIENT_INTERACTIVE定義)。參數默認值:28800秒(8小時)
# MySQL服務器所支持的最大連接數是有上限的,因為每個連接的建立都會消耗內存,因此我們希望客戶端在連接到MySQL Server處理完相應的操作后,
# 應該斷開連接並釋放占用的內存。如果你的MySQL Server有大量的閑置連接,他們不僅會白白消耗內存,而且如果連接一直在累加而不斷開,
# 最終肯定會達到MySQL Server的連接上限數,這會報'too many connections'的錯誤。對於wait_timeout的值設定,應該根據系統的運行情況來判斷。
# 在系統運行一段時間后,可以通過show processlist命令查看當前系統的連接狀態,如果發現有大量的sleep狀態的連接進程,則說明該參數設置的過大,
# 可以進行適當的調整小些。要同時設置interactive_timeout和wait_timeout才會生效。
tmp_table_size=320M #臨時表空間的大小,適當的增加臨時表空間可以提高鏈接查詢速度的效果
max_connections=2048 # MySQL的最大連接數
query_cache_size=128M #MySQL的查詢緩沖大小(從4.0.1開始,MySQL提供了查詢緩沖機制)使用查詢緩沖,MySQL將SELECT語句和查詢結果存放在緩沖區中
join_buffer_size = 32M # 聯合查詢操作所能使用的緩沖區大小,和sort_buffer_size一樣,該參數對應的分配內存也是每連接獨享
expire_logs_days=1 #超過1天的binlog刪除
tmpdir = /data/mysqltmp
back_log=256 # MySQL能有的連接數量,也就是說當max_connections時候,新來的請求會存在堆棧中,堆棧的數量就是back_log,如果超過back_log將會拒絕請求
thread_cache_size=32
# 這個值(默認8)表示可以重新利用保存在緩存中線程的數量,當斷開連接時如果緩存中還有空間,那么客戶端的線程將被放到緩存中,
# 如果線程重新被請求,那么請求將從緩存中讀取,如果緩存中是空的或者是新的請求,那么這個線程將被重新創建,如果有很多新的線程,
# 增加這個值可以改善系統性能.通過比較Connections和Threads_created狀態的變量,可以看到這個變量的作用。(–>表示要調整的值)
# 根據物理內存設置規則如下:
# 1G —> 8
# 2G —> 16
# 3G —> 32
# 大於3G —> 64
[mysqldump]
quick
max_allowed_packet = 64M #服務器發送和接受的最大包長度
[mysql]
no-auto-rehash
[myisamchk]
key_buffer_size = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M
[mysqlhotcopy]
interactive-timeout=2880000