mysql数据库学习(一)--基础
一、簡(jiǎn)介
MySQL是一個(gè)關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),由瑞典MySQL AB 公司開(kāi)發(fā),目前屬于 Oracle 旗下產(chǎn)品。MySQL 最流行的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),在 WEB 應(yīng)用方面MySQL是最好的 RDBMS (Relational Database Management System,關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)) 應(yīng)用軟件之一。
- MySQL是一種數(shù)據(jù)庫(kù)管理系統(tǒng)。
- MySQL是一種關(guān)聯(lián)數(shù)據(jù)庫(kù)管理系統(tǒng)。
- MySQL軟件是一種開(kāi)放源碼軟件。
- MySQL數(shù)據(jù)庫(kù)服務(wù)器具有快速、可靠和易于使用的特點(diǎn)。
- MySQL服務(wù)器工作在客戶(hù)端/服務(wù)器模式下,或嵌入式系統(tǒng)中。
- 有大量可用的共享MySQL軟件。
MySQL表最大能達(dá)到多少?
InnoDB存儲(chǔ)引擎將InnoDB表保存在一個(gè)表空間內(nèi),該表空間可由數(shù)個(gè)文件創(chuàng)建。這樣,表的大小就能超過(guò)單獨(dú)文件的最大容量。表空間可包括原始磁盤(pán)分區(qū),從而使得很大的表成為可能。表空間的最大容量為64TB。
二、安裝數(shù)據(jù)庫(kù)
下載MySQL地址:http://dev.mysql.com/downloads/mysql/
1.安裝操作
1.yum安裝,這個(gè)比較簡(jiǎn)單,可以將需要的包都給直接安裝好---推薦使用
yum install mysql-server2.ubuntu安裝,一般生產(chǎn)環(huán)境使用比較少
1. sudo apt-get install mysql-server 2. sudo apt-get isntall mysql-client 3. sudo apt-get install libmysqlclient-dev# 檢測(cè)是否安裝成功(是否為L(zhǎng)ISTEN狀態(tài)) sudo netstat -tap | grep mysql3.編譯安裝,較為復(fù)雜,依賴(lài)較多
# 安裝依賴(lài)包 yum install ncurses-devel gcc gcc-c++ -y# 創(chuàng)建目錄 mkdir -p /home/oldsuo/tools# 安裝cmake軟件,gmake編譯安裝 cd /home/oldsuo/tools/ tar xf cmake-2.8.8.tar.gz cd cmake-2.8.8 ./configure #CMake has bootstrapped. Now run gmake. gmake gmake install cd ../# 開(kāi)始安裝mysql # 創(chuàng)建用戶(hù)和組 groupadd mysql useradd mysql -s /sbin/nologin -M -g mysql# 解壓編譯MySQL tar zxf mysql-5.5.32.tar.gz cd mysql-5.5.32 cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.5.32 \ -DMYSQL_DATADIR=/application/mysql-5.5.32/data \ -DMYSQL_UNIX_ADDR=/application/mysql-5.5.32/tmp/mysql.sock \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DEXTRA_CHARSETS=gbk,gb2312,utf8,ascii \ -DENABLED_LOCAL_INFILE=ON \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_FEDERATED_STORAGE_ENGINE=1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \ -DWITHOUT_PARTITION_STORAGE_ENGINE=1 \ -DWITH_FAST_MUTEXES=1 \ -DWITH_ZLIB=bundled \ -DENABLED_LOCAL_INFILE=1 \ -DWITH_READLINE=1 \ -DWITH_EMBEDDED_SERVER=1 \ -DWITH_DEBUG=0#-- Build files have been written to: /home/oldsuo/tools/mysql-5.5.32 提示: 編譯時(shí)可配置的選項(xiàng)很多,具體可參考結(jié)尾附錄或官方文檔:make #[100%] Built target my_safe_process make install ln -s /application/mysql-5.5.32/ /application/mysql 如果上述操作未出現(xiàn)錯(cuò)誤,則MySQL5.5.32軟件cmake方式的安裝就算成功了。#拷貝配置文件 cp mysql-5.5.32/support-files/my-small.cnf /etc/my.cnf#添加變量,并使之生效 echo 'export PATH=/application/mysql/bin:$PATH' >>/etc/profile source /etc/profile echo $PATH#授權(quán)用戶(hù)及/tmp/臨時(shí)文件目錄 chown -R mysql.mysql /application/mysql/data/ chmod -R 1777 /tmp/#初始化數(shù)據(jù)庫(kù) cd /application/mysql/scripts/ ./mysql_install_db --basedir=/application/mysql/ --datadir=/application/mysql/data/ --user=mysql cd ../#啟動(dòng)數(shù)據(jù)庫(kù) cp support-files/mysql.server /etc/init.d/mysqld chmod +x /etc/init.d/mysqld /etc/init.d/mysqld start#檢查端口 netstat -lntup|grep 33062.安裝后操作
?1、刪除不必要的用戶(hù)和庫(kù):
#查看用戶(hù)和主機(jī)列,從mysql.user里查看 select user,host from mysql.user;#刪除用戶(hù)名為空的庫(kù),并檢查 delete from mysql.user where user=''; select user,host from mysql.user;#刪除主機(jī)名為localhost.localdomain的庫(kù),并檢查 delete from mysql.user where host='localhost.localdomain'; select user,host from mysql.user;#刪除主機(jī)名為::1的庫(kù),并檢查。::1庫(kù)的作用為IPV6 delete from mysql.user where host='::1';#刪除test庫(kù) drop database test;2、添加額外管理員:
# 添加額外管理員,system作為管理員,123456為密碼 mysql> delete from mysql.user; Query OK, 2 rows affected (0.00 sec) mysql> grant all privileges on *.* to system@'localhost' identified by '123456' with grant option; Query OK, 0 rows affected (0.00 sec) # 刷新MySQL的系統(tǒng)權(quán)限相關(guān)表,使配置生效 mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) mysql> select user,host from mysql.user; +--------+-----------+ | user | host | +--------+-----------+ | system | localhost | +--------+-----------+ 1 row in set (0.00 sec) mysql>3、設(shè)置登錄密碼并開(kāi)機(jī)自啟:
#設(shè)置密碼,并登陸 /usr/local/mysql/bin/mysqladmin -u root password 'oldsuo' mysql -usystem -p#開(kāi)機(jī)啟動(dòng)mysqld,并檢查 chkconfig mysqld on chkconfig --list mysqld三、字符集
1.字符集簡(jiǎn)介
字符集,character set,就是一套表示字符的符號(hào)和這些的符號(hào)的底層編碼;而校驗(yàn)規(guī)則,則是在字符集內(nèi)用于比較字符的一套規(guī)則。簡(jiǎn)單的說(shuō),字符集就是一套文字符號(hào)及其編碼、比較規(guī)則的集合,第一個(gè)計(jì)算機(jī)字符集ASC2,MySQL數(shù)據(jù)庫(kù)字符集包括字符集和校對(duì)規(guī)則兩個(gè)概念,字符集是定義數(shù)據(jù)庫(kù)里面的內(nèi)容字符串的存儲(chǔ)方式,而校對(duì)規(guī)則是定義比較字符串的方式。
建議:中英文環(huán)境選擇utf8
2、查看設(shè)置字符集
# 查看MySQL字符集設(shè)置情況 show variables like 'character_set%'; # 查看庫(kù)的字符集 show create database db; # 查看表的字符集 show create table db_tb\G # 查詢(xún)所有 show collation;# 設(shè)置表的字符集 set tables utf8;3、MySQL數(shù)據(jù)亂碼及解決方法
1> 系統(tǒng)方面 cat /etc/sysconfig/i18n LANG="zh_CN.UTF-8"2> 客戶(hù)端(程序),調(diào)整字符集為latin1。 mysql> set names latin1; #臨時(shí)生效 Query OK, 0 rows affected (0.00 sec)#更改my.cnf客戶(hù)端模塊的參數(shù),實(shí)現(xiàn)set name latin1 的效果,并且永久生效。 [client] default-character-set=latin1 #無(wú)需重啟服務(wù),退出登錄就生效,相當(dāng)于set name latin1。3> 服務(wù)端,更改my.cnf參數(shù) [mysqld] default-character-set=latin1 #適合5.1及以前版本 character-set-server=latin1 #適合5.54> 庫(kù)、表、程序 #建表指定utf8字符集 mysql> create database nick_defailtsss DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; Query OK, 1 row affected (0.00 sec)4、將utf8字符集修改成GBK字符集的實(shí)際過(guò)程
1> 導(dǎo)出表結(jié)構(gòu) #以u(píng)tf8格式導(dǎo)出 mysqldump -uroot -p --default-character-set=utf8 -d nick_defailt>alltable.sql --default-character-set=gbk #表示已GBK字符集連接 –d 只表示表結(jié)構(gòu)2> 編輯alltable.sql 將utf8改成gbk。3> 確保數(shù)據(jù)庫(kù)不在更新,導(dǎo)出所有數(shù)據(jù) mysqldump -uroot -p --quick --no-create-info --extended-insert --default-character-set=utf8 nick_defailt>alldata.sql4> 打開(kāi)alldata.sql將set name utf8 修改成 set names gbk(或者修改系統(tǒng)的服務(wù)端和客戶(hù)端)5> 建庫(kù) create database oldsuo default charset gbk;6> 創(chuàng)建表,執(zhí)行alltable.sql mysql -uroot -p oldsuo <alltable.sql7> 導(dǎo)入數(shù)據(jù) mysql -uroot -p oldsuo <alltable.sql四、存儲(chǔ)引擎
MySQL最常用存儲(chǔ)引擎Myisam和Innodb。mysql 5.5.5以后默認(rèn)存儲(chǔ)引擎為Innodb。
MySQL的每種引擎在MySQL里是通過(guò)插件的方式使用的,MySQL可以支持多種存儲(chǔ)引擎。
建議:使用?Innodb引擎,因?yàn)橹С只貪L。
1.引擎對(duì)應(yīng)系統(tǒng)文件
1) MyISAM引擎系統(tǒng)庫(kù)表對(duì)應(yīng)文件 [root@mysql 3306]# ll /data/3306/data/mysql/ -rw-rw----. 1 mysql mysql 10630 10月 31 16:05 user.frm #保存表的定義 -rw-rw----. 1 mysql mysql 1140 10月 31 18:40 user.MYD #數(shù)據(jù)文件 -rw-rw----. 1 mysql mysql 2048 10月 31 18:40 user.MYI #索引文件 [root@mysql 3306]# file data/mysql/user.frm data/mysql/user.frm: MySQL table definition file Version 9 [root@mysql 3306]# file data/mysql/user.MYD data/mysql/user.MYD: DBase 3 data file (167514107 records) [root@mysql 3306]# file data/mysql/user.MYI data/mysql/user.MYI: MySQL MISAM compressed data file Version 12) InnoDB引擎[root@mysql 3306]# ll data/ -rw-rw----. 1 mysql mysql 134217728 10月 31 20:05 ibdata12.修改引擎
創(chuàng)建后引擎的修改 語(yǔ)法: ALTER TABLE student ENGINE = INNODB;ALTER TABLE student ENGINE = MyISAM;3、建表指定引擎
mysql> create table mess ( -> id int(4) not null, -> name char(20) not null,-> age tinyint(2) NOT NULL default '0',-> dept varchar(16) default NULL-> ) ENGINE=MyISAM CHARSET=utf8; Query OK, 0 rows affected (0.00 sec)五、基本操作
學(xué)習(xí)如何管理和導(dǎo)航MySQL數(shù)據(jù)庫(kù)和表是要掌握的首要任務(wù)之一,下面的內(nèi)容將主要對(duì)MySQL的數(shù)據(jù)庫(kù)和表的一些常用命令進(jìn)行總結(jié),一些我們不得不掌握的命令,一些信手拈來(lái)的命令。
1.數(shù)據(jù)操作
運(yùn)行相關(guān):
1、 單實(shí)例mysql啟動(dòng) [root@localhost ~]# /etc/init.d/mysqld start Starting MySQL [確定] #mysqld_safe –user=mysql &2、 查看MySQL端口 [root@localhost ~]# ss -lntup|grep 3306 tcp LISTEN 0 50 *:3306 *:* users:(("mysqld",19651,10))3、 查看MySQL進(jìn)程 [root@localhost ~]# ps -ef|grep mysql|grep -v grep root 19543 1 0 Oct10 ? 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/data --pid-file=/usr/local/mysql/data/localhost.localdomain.pid mysql 19651 19543 0 Oct10 ? 00:05:04 /usr/local/mysql/libexec/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql --log-error=/usr/local/mysql/data/localhost.localdomain.err --pid-file=/usr/local/mysql/data/localhost.localdomain.pid --socket=/tmp/mysql.sock --port=33064、 MySQL啟動(dòng)原理 /etc/init.d/mysqld 是一個(gè)shell啟動(dòng)腳本,啟動(dòng)后最終會(huì)調(diào)用mysqld_safe腳本,最后調(diào)用mysqld服務(wù)啟動(dòng)mysql。"$manager" \--mysqld-safe-compatible \--user="$user" \--pid-file="$pid_file" >/dev/null 2>&1 &5、關(guān)閉數(shù)據(jù)庫(kù) [root@localhost ~]# /etc/init.d/mysqld stop Shutting down MySQL.... [確定]6、 查看mysql數(shù)據(jù)庫(kù)里操作命令歷史 cat /root/.mysql_history7、 強(qiáng)制linux不記錄敏感歷史命令 HISTCONTROL=ignorespace8、 mysql設(shè)置密碼 /usr/local/mysql/bin/mysqladmin -u root password 'oldsuo'9、 mysql修改密碼,與多實(shí)例指定sock修改密碼 mysqladmin -uroot -passwd password 'oldsuo' mysqladmin -uroot -passwd password 'oldsuo' -S /data/3306/mysql.sock操作相關(guān):
1.查看當(dāng)前版本
select version();2.查看當(dāng)前用戶(hù)
select user();3.顯示數(shù)據(jù)庫(kù)
show databases;默認(rèn)數(shù)據(jù)庫(kù):
mysql - 用戶(hù)權(quán)限相關(guān)數(shù)據(jù)
test - 用于用戶(hù)測(cè)試數(shù)據(jù)
information_schema - MySQL本身架構(gòu)相關(guān)數(shù)據(jù)
4.創(chuàng)建數(shù)據(jù)
# utf-8 CREATE DATABASE 數(shù)據(jù)庫(kù)名稱(chēng) DEFAULT CHARSET utf8 COLLATE utf8_general_ci;# gbk CREATE DATABASE 數(shù)據(jù)庫(kù)名稱(chēng) DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;5.使用數(shù)據(jù)庫(kù)
use db_name6.查看當(dāng)前數(shù)據(jù)表
show tables;7.用戶(hù)管理
創(chuàng)建用戶(hù)create user '用戶(hù)名'@'IP地址' identified by '密碼'; 刪除用戶(hù)drop user '用戶(hù)名'@'IP地址'; 修改用戶(hù)rename user '用戶(hù)名'@'IP地址'; to '新用戶(hù)名'@'IP地址';; 修改密碼set password for '用戶(hù)名'@'IP地址' = Password('新密碼')PS:用戶(hù)權(quán)限相關(guān)數(shù)據(jù)保存在mysql數(shù)據(jù)庫(kù)的user表中,所以也可以直接對(duì)其進(jìn)行操作(不建議)8.授權(quán)管理
show grants for '用戶(hù)'@'IP地址' -- 查看權(quán)限 grant 權(quán)限 on 數(shù)據(jù)庫(kù).表 to '用戶(hù)'@'IP地址' -- 授權(quán) revoke 權(quán)限 on 數(shù)據(jù)庫(kù).表 from '用戶(hù)'@'IP地址' -- 取消權(quán)限 all privileges 除grant外的所有權(quán)限select 僅查權(quán)限select,insert 查和插入權(quán)限...usage 無(wú)訪問(wèn)權(quán)限alter 使用alter tablealter routine 使用alter procedure和drop procedurecreate 使用create tablecreate routine 使用create procedurecreate temporary tables 使用create temporary tablescreate user 使用create user、drop user、rename user和revoke all privilegescreate view 使用create viewdelete 使用deletedrop 使用drop tableexecute 使用call和存儲(chǔ)過(guò)程file 使用select into outfile 和 load data infilegrant option 使用grant 和 revokeindex 使用indexinsert 使用insertlock tables 使用lock tableprocess 使用show full processlistselect 使用selectshow databases 使用show databasesshow view 使用show viewupdate 使用updatereload 使用flushshutdown 使用mysqladmin shutdown(關(guān)閉MySQL)super 使用change master、kill、logs、purge、master和set global。還允許mysqladmin調(diào)試登陸replication client 服務(wù)器位置的訪問(wèn)replication slave 由復(fù)制從屬使用對(duì)于權(quán)限 關(guān)于權(quán)限 對(duì)于目標(biāo)數(shù)據(jù)庫(kù)以及內(nèi)部其他:數(shù)據(jù)庫(kù)名.* 數(shù)據(jù)庫(kù)中的所有數(shù)據(jù)庫(kù)名.表 指定數(shù)據(jù)庫(kù)中的某張表數(shù)據(jù)庫(kù)名.存儲(chǔ)過(guò)程 指定數(shù)據(jù)庫(kù)中的存儲(chǔ)過(guò)程*.* 所有數(shù)據(jù)庫(kù) 關(guān)于數(shù)據(jù)庫(kù) 用戶(hù)名@IP地址 用戶(hù)只能在改IP下才能訪問(wèn)用戶(hù)名@192.168.1.% 用戶(hù)只能在改IP段下才能訪問(wèn)(通配符%表示任意)用戶(hù)名@% 用戶(hù)可以再任意IP下訪問(wèn)(默認(rèn)IP地址為%) 關(guān)于用戶(hù) grant all privileges on db1.tb1 TO '用戶(hù)名'@'IP'grant select on db1.* TO '用戶(hù)名'@'IP'grant select,insert on *.* TO '用戶(hù)名'@'IP'revoke select on db1.tb1 from '用戶(hù)名'@'IP' 實(shí)例6.破解Mysql登錄密碼
1> 普通方式 #> service mysqld stop #>mysqld_safe --skip-grant-tables & 輸入 mysql -uroot -p 回車(chē)進(jìn)入 >use mysql; > update user set password=PASSWORD("newpass")where user="root"; 更改密碼為 newpassord > flush privileges; 更新權(quán)限 > quit 退出 service mysqld restart mysql -uroot -p新密碼進(jìn)入2> 普通方式的簡(jiǎn)寫(xiě) service mysqld stop mysqld_safe --skip-grant-tables --user=mysql & mysql update mysql.user set password=PASSWORD("newpass")where user="root" and host='localhost'; flush privileges; mysqladmin -uroot -pnewpass shutdown /etc/init.d/mysqld start mysql -uroot -pnewpass #登陸3>多實(shí)例方式 killall mysqld mysqld_safe –defaults-file=/data/3306/my.cnf –skip-grant-table & mysql –u root –p –S /data/3306/mysql.sock #指定sock登陸 update mysql.user set password=PASSWORD("newpass")where user="root"; flush privileges; mysqladmin -uroot -pnewpass shutdown /etc/init.d/mysqld start mysql -uroot -pnewpass #登陸?
參考文章:http://www.cnblogs.com/wupeiqi/articles/5713315.html
參考文章:http://www.cnblogs.com/suoning/p/5742885.html
轉(zhuǎn)載于:https://www.cnblogs.com/chushiyaoyue/p/5913406.html
總結(jié)
以上是生活随笔為你收集整理的mysql数据库学习(一)--基础的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 树莓派:VNC远程控制
- 下一篇: 数据库个人优化学习记录