mysql数据库学习(一)--基础
一、簡介
MySQL是一個關系型數據庫管理系統,由瑞典MySQL AB 公司開發,目前屬于 Oracle 旗下產品。MySQL 最流行的關系型數據庫管理系統,在 WEB 應用方面MySQL是最好的 RDBMS (Relational Database Management System,關系數據庫管理系統) 應用軟件之一。
- MySQL是一種數據庫管理系統。
- MySQL是一種關聯數據庫管理系統。
- MySQL軟件是一種開放源碼軟件。
- MySQL數據庫服務器具有快速、可靠和易于使用的特點。
- MySQL服務器工作在客戶端/服務器模式下,或嵌入式系統中。
- 有大量可用的共享MySQL軟件。
MySQL表最大能達到多少?
InnoDB存儲引擎將InnoDB表保存在一個表空間內,該表空間可由數個文件創建。這樣,表的大小就能超過單獨文件的最大容量。表空間可包括原始磁盤分區,從而使得很大的表成為可能。表空間的最大容量為64TB。
二、安裝數據庫
下載MySQL地址:http://dev.mysql.com/downloads/mysql/
1.安裝操作
1.yum安裝,這個比較簡單,可以將需要的包都給直接安裝好---推薦使用
yum install mysql-server2.ubuntu安裝,一般生產環境使用比較少
1. sudo apt-get install mysql-server 2. sudo apt-get isntall mysql-client 3. sudo apt-get install libmysqlclient-dev# 檢測是否安裝成功(是否為LISTEN狀態) sudo netstat -tap | grep mysql3.編譯安裝,較為復雜,依賴較多
# 安裝依賴包 yum install ncurses-devel gcc gcc-c++ -y# 創建目錄 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 ../# 開始安裝mysql # 創建用戶和組 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 提示: 編譯時可配置的選項很多,具體可參考結尾附錄或官方文檔:make #[100%] Built target my_safe_process make install ln -s /application/mysql-5.5.32/ /application/mysql 如果上述操作未出現錯誤,則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#授權用戶及/tmp/臨時文件目錄 chown -R mysql.mysql /application/mysql/data/ chmod -R 1777 /tmp/#初始化數據庫 cd /application/mysql/scripts/ ./mysql_install_db --basedir=/application/mysql/ --datadir=/application/mysql/data/ --user=mysql cd ../#啟動數據庫 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、刪除不必要的用戶和庫:
#查看用戶和主機列,從mysql.user里查看 select user,host from mysql.user;#刪除用戶名為空的庫,并檢查 delete from mysql.user where user=''; select user,host from mysql.user;#刪除主機名為localhost.localdomain的庫,并檢查 delete from mysql.user where host='localhost.localdomain'; select user,host from mysql.user;#刪除主機名為::1的庫,并檢查。::1庫的作用為IPV6 delete from mysql.user where host='::1';#刪除test庫 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的系統權限相關表,使配置生效 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、設置登錄密碼并開機自啟:
#設置密碼,并登陸 /usr/local/mysql/bin/mysqladmin -u root password 'oldsuo' mysql -usystem -p#開機啟動mysqld,并檢查 chkconfig mysqld on chkconfig --list mysqld三、字符集
1.字符集簡介
字符集,character set,就是一套表示字符的符號和這些的符號的底層編碼;而校驗規則,則是在字符集內用于比較字符的一套規則。簡單的說,字符集就是一套文字符號及其編碼、比較規則的集合,第一個計算機字符集ASC2,MySQL數據庫字符集包括字符集和校對規則兩個概念,字符集是定義數據庫里面的內容字符串的存儲方式,而校對規則是定義比較字符串的方式。
建議:中英文環境選擇utf8
2、查看設置字符集
# 查看MySQL字符集設置情況 show variables like 'character_set%'; # 查看庫的字符集 show create database db; # 查看表的字符集 show create table db_tb\G # 查詢所有 show collation;# 設置表的字符集 set tables utf8;3、MySQL數據亂碼及解決方法
1> 系統方面 cat /etc/sysconfig/i18n LANG="zh_CN.UTF-8"2> 客戶端(程序),調整字符集為latin1。 mysql> set names latin1; #臨時生效 Query OK, 0 rows affected (0.00 sec)#更改my.cnf客戶端模塊的參數,實現set name latin1 的效果,并且永久生效。 [client] default-character-set=latin1 #無需重啟服務,退出登錄就生效,相當于set name latin1。3> 服務端,更改my.cnf參數 [mysqld] default-character-set=latin1 #適合5.1及以前版本 character-set-server=latin1 #適合5.54> 庫、表、程序 #建表指定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字符集的實際過程
1> 導出表結構 #以utf8格式導出 mysqldump -uroot -p --default-character-set=utf8 -d nick_defailt>alltable.sql --default-character-set=gbk #表示已GBK字符集連接 –d 只表示表結構2> 編輯alltable.sql 將utf8改成gbk。3> 確保數據庫不在更新,導出所有數據 mysqldump -uroot -p --quick --no-create-info --extended-insert --default-character-set=utf8 nick_defailt>alldata.sql4> 打開alldata.sql將set name utf8 修改成 set names gbk(或者修改系統的服務端和客戶端)5> 建庫 create database oldsuo default charset gbk;6> 創建表,執行alltable.sql mysql -uroot -p oldsuo <alltable.sql7> 導入數據 mysql -uroot -p oldsuo <alltable.sql四、存儲引擎
MySQL最常用存儲引擎Myisam和Innodb。mysql 5.5.5以后默認存儲引擎為Innodb。
MySQL的每種引擎在MySQL里是通過插件的方式使用的,MySQL可以支持多種存儲引擎。
建議:使用?Innodb引擎,因為支持回滾。
1.引擎對應系統文件
1) MyISAM引擎系統庫表對應文件 [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 #數據文件 -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.修改引擎
創建后引擎的修改 語法: 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)五、基本操作
學習如何管理和導航MySQL數據庫和表是要掌握的首要任務之一,下面的內容將主要對MySQL的數據庫和表的一些常用命令進行總結,一些我們不得不掌握的命令,一些信手拈來的命令。
1.數據操作
運行相關:
1、 單實例mysql啟動 [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進程 [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啟動原理 /etc/init.d/mysqld 是一個shell啟動腳本,啟動后最終會調用mysqld_safe腳本,最后調用mysqld服務啟動mysql。"$manager" \--mysqld-safe-compatible \--user="$user" \--pid-file="$pid_file" >/dev/null 2>&1 &5、關閉數據庫 [root@localhost ~]# /etc/init.d/mysqld stop Shutting down MySQL.... [確定]6、 查看mysql數據庫里操作命令歷史 cat /root/.mysql_history7、 強制linux不記錄敏感歷史命令 HISTCONTROL=ignorespace8、 mysql設置密碼 /usr/local/mysql/bin/mysqladmin -u root password 'oldsuo'9、 mysql修改密碼,與多實例指定sock修改密碼 mysqladmin -uroot -passwd password 'oldsuo' mysqladmin -uroot -passwd password 'oldsuo' -S /data/3306/mysql.sock操作相關:
1.查看當前版本
select version();2.查看當前用戶
select user();3.顯示數據庫
show databases;默認數據庫:
mysql - 用戶權限相關數據
test - 用于用戶測試數據
information_schema - MySQL本身架構相關數據
4.創建數據
# utf-8 CREATE DATABASE 數據庫名稱 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;# gbk CREATE DATABASE 數據庫名稱 DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;5.使用數據庫
use db_name6.查看當前數據表
show tables;7.用戶管理
創建用戶create user '用戶名'@'IP地址' identified by '密碼'; 刪除用戶drop user '用戶名'@'IP地址'; 修改用戶rename user '用戶名'@'IP地址'; to '新用戶名'@'IP地址';; 修改密碼set password for '用戶名'@'IP地址' = Password('新密碼')PS:用戶權限相關數據保存在mysql數據庫的user表中,所以也可以直接對其進行操作(不建議)8.授權管理
show grants for '用戶'@'IP地址' -- 查看權限 grant 權限 on 數據庫.表 to '用戶'@'IP地址' -- 授權 revoke 權限 on 數據庫.表 from '用戶'@'IP地址' -- 取消權限 all privileges 除grant外的所有權限select 僅查權限select,insert 查和插入權限...usage 無訪問權限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和存儲過程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(關閉MySQL)super 使用change master、kill、logs、purge、master和set global。還允許mysqladmin調試登陸replication client 服務器位置的訪問replication slave 由復制從屬使用對于權限 關于權限 對于目標數據庫以及內部其他:數據庫名.* 數據庫中的所有數據庫名.表 指定數據庫中的某張表數據庫名.存儲過程 指定數據庫中的存儲過程*.* 所有數據庫 關于數據庫 用戶名@IP地址 用戶只能在改IP下才能訪問用戶名@192.168.1.% 用戶只能在改IP段下才能訪問(通配符%表示任意)用戶名@% 用戶可以再任意IP下訪問(默認IP地址為%) 關于用戶 grant all privileges on db1.tb1 TO '用戶名'@'IP'grant select on db1.* TO '用戶名'@'IP'grant select,insert on *.* TO '用戶名'@'IP'revoke select on db1.tb1 from '用戶名'@'IP' 實例6.破解Mysql登錄密碼
1> 普通方式 #> service mysqld stop #>mysqld_safe --skip-grant-tables & 輸入 mysql -uroot -p 回車進入 >use mysql; > update user set password=PASSWORD("newpass")where user="root"; 更改密碼為 newpassord > flush privileges; 更新權限 > quit 退出 service mysqld restart mysql -uroot -p新密碼進入2> 普通方式的簡寫 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>多實例方式 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
轉載于:https://www.cnblogs.com/chushiyaoyue/p/5913406.html
總結
以上是生活随笔為你收集整理的mysql数据库学习(一)--基础的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 树莓派:VNC远程控制
- 下一篇: Oracle 块修改跟踪 (Block