mysql[options] #Linux或UNIX shell提示符(終端窗口) mysql --help #查看幫助信息 mysql --version/-V #查看客戶端程序的版本
01.常見的選項語法格式:mysql
長格式(--<option>)sql
簡易格式(-<option>)shell
02.經過指定的主機進行鏈接:數據庫
本地鏈接到在同一主機上運行的服務器vim
遠程鏈接到在其餘主機上運行的服務器安全
03.常見特定於客戶機的鏈接選項服務器
-u<user_name>或--host=<user_name>
-p<password>
-h<host_name>或--host=<host_name>
--protocol=<protocol_name> #協議
-P<port_number>或--port=<port_number>
-S<socket_name>或--socket=<socket_name>
1 [root@db02 ~]# file /application/mysql/bin/mysqld 2 3 /application/mysql/bin/mysqld: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, not stripped
提示:單進程mysqld 其屬性LSB即二進制的可執行文件,mysql.server便於咱們經過SYS-V啓動關閉的腳本網絡
說明:support-files/mysql.server及mysqld_safe都是腳本文件,最後都調用mysqld二進制文件啓動app
01.數據庫關閉命令socket
1 /etc/init.d/mysqld stop
2 mysqladmin -uroot -poldboy123 shutdown
注意:生產環境下禁止使用下述方式關閉mysql軟件
kill -9 #利用系統進程管理命令關閉MySQL kill pid # pid即數據庫服務對應的進程號 l killall mysqld #mysqld即數據庫服務對應的進程名 l pkill mysqld #mysqld即數據庫服務對應的進程名
02.數據庫啓動命令
1 /etc/init.d/mysqld start
2 application/mysql/bin/mysqld_safe [--user=mysql] &
在mysql使用過程當中,因爲操做系統引發的文件目錄不存在或sql語句錯誤引發的報錯,這些error會有相應的代碼如errorN、ErrcodeN,這裏"N"表明具體的錯誤號
1 [root@db02 ~]# perror 126 127 135 2 OS error code 126: Required key not available 3 MySQL error code 126: Index file is crashed 4 OS error code 127: Key has expired 5 MySQL error code 127: Record file is crashed 6 MySQL error code 135: No more room in record file
即在數據庫啓動以前經過/etc/my.cnf告訴啓動程序一系列預設置的選項
配置文件功能:影響服務器進程的啓動;影響到客戶端程序
實例01
1 ./mysqld_safe --basedir=/application/mysql --datadir=/application/mysql/data --socket=/tmp/mysql.sock --user=mysql #指定mysql啓動參數
注意:因爲指定了socket致使沒法找到該文件,此時mysql沒法進行正常鏈接,故使用mysql -uroot -poldboy123 -S /tmp/mysql.sock便可
使用不一樣的"標籤/模塊"明確指定影響哪部分功能,表明一類程序
實例02
1 vim /etc/my.cnf 2 3 [mysqld] 4 basedir=/application/mysql 5 datadir=/application/mysql/data 6 socket=/tmp/mysql.sock 7 log-error=/var/log/mysql.log 8 port=3307 #其中,用戶無需指定 9 10 [mysql] 11 socket=/tmp/mysql.sock 12 user=root 13 password=oldboy123 #此處經過socket登陸,無需配置端口 14 /etc/init.d/mysqld restart #重啓生效
說明:此時檢查進程信息,能夠看到與咱們手動配置的my.cnf一致
1 [root@db02 ~]# ps -ef |grep [my]sql 2 3 root 3411 1918 0 15:52 pts/1 00:00:00 /bin/sh /application/mysql/bin/mysqld_safe 4 5 mysql 3548 3411 0 15:52 pts/1 00:00:00 /application/mysql/bin/mysqld --basedir=/application/mysql --datadir=/application/mysql/data --plugin-dir=/application/mysql/lib/plugin --user=mysql --log-error=/var/log/mysql.log --pid-file=/application/mysql/data/db02.pid --socket=/tmp/mysql.sock --port=3307
/etc/my.cnf ↓ ↓ ↓ /etc/mysql/my.cnf $MYSQL_HOME/my.cnf defaults-extra-file ~/.my.cnf
說明:假設4個配置文件都存在, 同時使用 --defaults-extra-file指定了參數文件,這時若是有一個"參數變量"在5個配置文件中都出現了,那麼後面的配置文件中的參數變量值會覆蓋前面配置文件中的參數變量值,就是說會使用 ~/. my.cnf中設置的值
注意:若使用 ./bin/mysqld_safe守護進程啓動mysql數據庫時,使用了 --defaults-file=<配置文件的絕對路徑>參數,這時只會使用這個參數指定的配置文件
多個mysqld+多套my.cnf+多套數據=>生產環境無用
思路:
01.初始化兩套數據到不一樣目錄mysql_install_db /data/3306 /data/3308 02.兩套配置文件 /data/3306/my.cnf /data/3308/my.cnf 03.兩個socket socket=/data/3306/mysql.sock socket=/data/3308/mysql.sock 04.兩套實例 /application/mysql/bin/mysqld_safe --defaults-file=/data/3306/my.cnf /application/mysql/bin/mysqld_safe --defaults-file=/data/3306/my.cnf 05.設計啓動腳本
注意:需首先關閉當前mysql服務,防止形成端口衝突/etc/init.d/mysqld stop
1 [root@db02 ~]# vim /data/3306/my.cnf 2 [client] 3 port = 3306 4 socket = /data/3306/mysql.sock 5 6 [mysqld] 7 user = mysql 8 port = 3306 9 socket = /data/3306/mysql.sock 10 basedir = /application/mysql 11 datadir = /data/3306/data 12 log-bin = /data/3306/mysql-bin 13 server-id = 6 14 15 [mysqld_safe] 16 log-error=/data/3306/oldboy_3306.err 17 pid-file=/data/3306/mysqld.pid
[root@db02 ~]# vim /data/3306/mysql #!/bin/sh port=3306 mysql_user="root" CmdPath="/application/mysql/bin" mysql_sock="/data/${port}/mysql.sock" mysqld_pid_file_path=/data/3306/3306.pid start(){ if [ ! -e "$mysql_sock" ];then printf "Starting MySQL...\n" /bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf --pid-file=$mysqld_pid_file_path 2>&1 > /dev/null & sleep 3 else printf "MySQL is running...\n" exit 1 fi } stop(){ if [ ! -e "$mysql_sock" ];then printf "MySQL is stopped...\n" exit 1 else printf "Stoping MySQL...\n" mysqld_pid=`cat "$mysqld_pid_file_path"` if (kill -0 $mysqld_pid 2>/dev/null) then kill $mysqld_pid sleep 2 fi fi } restart(){ printf "Restarting MySQL...\n" stop sleep 2 start } case "$1" in start) start ;; stop) stop ;; restart) restart ;; *) printf "Usage: /data/${port}/mysql {start|stop|restart}\n" esac
1 \cp /data/3306/my.cnf /data/3308/ 2 \cp /data/3306/mysql /data/3308/ 3 sed -i 's/3306/3308/g' /data/3308/my.cnf 4 sed -i 's/server-id = 6/server-id = 8/g' /data/3308/my.cnf 5 sed -i 's/3306/3308/g' /data/3308/mysql
1 mkdir -p /data/{3306,3308}/data 2 chown -R mysql.mysql /data/ 3 chmod 700 /data/{3306,3308} #增長其安全性
1 cd /application/mysql/scripts 2 ./mysql_install_db --defaults-file=/data/3306/my.cnf --basedir=/application/mysql --datadir=/data/3306/data --user=mysql 3 ./mysql_install_db --defaults-file=/data/3308/my.cnf --basedir=/application/mysql --datadir=/data/3308/data --user=mysql 4 5 6 touch /data/3306/oldboy_3306.err 7 touch /data/3308/oldboy_3308.err
說明:5.6.36特殊性即不會自動建立錯誤日誌文件
1 /data/3306/mysql start
2 /data/3308/mysql start
3
4 sleep 5
注意:因爲mysql服務的默認端口爲3306,故在啓動以前需先將mysql服務中止運行並關閉開機自啓動
1 [root@db02 scripts]# netstat -lntup|grep 330 2 tcp 0 0 :::3306 :::* LISTEN 1793/mysqld 3 tcp 0 0 :::3308 :::* LISTEN 2001/mysqld 4 5 [root@db02 ~]# ps -ef |grep [m]ysql 6 root 1217 1 0 22:40 ? 00:00:00 /bin/sh /application/mysql/bin/mysqld_safe --defaults-file=/data/3306/my.cnf --pid-file=/data/3306/3306.pid 7 mysql 1403 1217 0 22:40 ? 00:00:01 /application/mysql/bin/mysqld --defaults-file=/data/3306/my.cnf --basedir=/application/mysql --datadir=/data/3306/data --plugin-dir=/application/mysql/lib/plugin --user=mysql --log-error=/data/3306/oldboy_3306.err --pid-file=/data/3306/3306.pid --socket=/data/3306/mysql.sock --port=3306 8 9 root 1426 1 0 22:40 ? 00:00:00 /bin/sh /application/mysql/bin/mysqld_safe --defaults-file=/data/3308/my.cnf --pid-file=/data/3308/3308.pid 10 mysql 1611 1426 0 22:40 ? 00:00:01 /application/mysql/bin/mysqld --defaults-file=/data/3308/my.cnf --basedir=/application/mysql --datadir=/data/3308/data --plugin-dir=/application/mysql/lib/plugin --user=mysql --log-error=/data/3308/oldboy_3308.err --pid-file=/data/3308/3308.pid --socket=/data/3308/mysql.sock --port=3308
1 vim /etc/rc.local
2
3 /data/3306/mysql start
4 /data/3308/mysql start
1 mysql -S /data/3306/mysql.sock
2 mysql -S /data/3308/mysql.sock #或mysql -h 10.0.0.52 -P 3306
01.定義:用戶名+主機域(host指定要登錄本機的用戶主機,而非本機)
02.功能做用:鏈接數據庫、管理數據庫對象及數據
03.鏈接數據庫:
A.定義用戶:用戶名+主機域、密碼
B.定義權限:對不一樣對象進行權限(角色)定義
grant 權限 on 權限範圍(對象) to 用戶 identified by '密碼';
04.權限(角色):
對數據庫的讀、寫等操做,如create、select、insert、update等
數據庫定義好的一組權限的定義,如all privileges、replication slave
05.權限範圍:
全庫級別:*.* (全部數據庫對象) 單庫級別:banana.* (oldboy單庫下全部對象) 單表級別:banana.test (單表級別)
注意:當在多個權限範圍上設置了同一個用戶的權限時,以綜合最大權限爲準。故在通常狀況下不要在多個權限範圍內設置權限,如庫級別oldboy.*、表級別oldboy.test
06.用戶:
repl@localhost repl@'10.0.0.53' repl@'10.0.0.%'(%爲通配符,匹配全部)或10.0.0.0/255.0.0.0 repl@'10.0.0.5%'
#網段帶匹配符%則必須加' ',用戶可加可不加
查看當前全部用戶(選擇)
select user,password,host from mysql.user;
建立用戶
語法:CREATE USER '用戶'@'主機' IDENTIFIED BY '密碼'; 實例:create user 'banana'@'10.0.0.%' identified by '123';
受權用戶
語法:GRANT ALL ON *.* TO '用戶'@'主機'; 實例:grant all on banana.* to banana@'172.16.1.%';
其餘實例
grant all on *.* to banana@'172.16.1.%' identified by '123'; #建立用戶,同時進行受權 grant all on *.* to banana@'localhost' identified by '123' with grant option; #受權單表root同樣的權限 grant select,create,insert,update on banana.* to banana@'10.0.0.%' identified by '123'; #只對banana數據庫下的對象進行增insert create、改update、查select
收回用戶權限
語法:REVOKE INSERT ON *.* FROM '用戶'@'主機'; 實例:revoke drop on banana.* from 'banana'@'10.0.0.%';
查看用戶對應權限
語法:SHOW GRANTS FOR '用戶'@'主機'; 實例:show grants for banana@'10.0.0.%';
注意:mysql內自帶的命令能夠大寫,而自身定義的用戶管理需區分大小寫;儘可能不要修改受權表
說明:使用數據庫自帶的命令無需修改受權表如drop、grant,而使用如delete、update等命令則需修改受權表,以下
刪除用戶
語法:drop user 'user'@'主機域; 實例:drop user banana@'10.0.0.52'; delete from mysql.user where user='banana' and host='localhost'; #強制刪除用戶(危險) flush privileges;
總結說明:能夠受權的用戶權限create, select, insert, update, delete, drop, reload, shutdown, process, file, references, index, alter, show databases, super, create temporary tables, lock tables, execute, replication slave, replication client, create view, show view, create routine, alter routine, create user, event, trigger, create tablespace
01.中止mysql服務
1 /etc/init.d/mysqld stop
02.添加參數啓動服務
1 /application/mysql/bin/mysqld_safe --skip-grant-tables --skip-networking --user=mysql &
說明:在此模式下啓動狀況爲:無密碼登錄、網絡用戶沒法登錄(只能本地登陸)、與受權有關的命令均沒法執行,如grant,revoke,drop user,create user
03.修改密碼
1 mysql 2 3 mysql> use mysql 4 mysql> update mysql.user set password=PASSWORD('123') where user='root' and host='localhost'; #只針對5.6 5 mysql> flush privileges;
04.重啓mysql服務
1 /etc/init.d/mysqld restart
05.登陸驗證
1 mysql -uroot -p123
至此,密碼修改爲功
SQL是用戶用來管理及控制數據庫的專用語言
mysql:
用於數據庫鏈接管理;將用戶SQL語句發送到服務器
mysqladmin:
命令行管理工具
mysqldump:
備份數據庫和表的內容
\h 或 help 或 ? #獲取幫助信息,如help grant \G #格式化輸出(行轉列),如select * from mysql.user\G \T 或 tee #記錄操做日誌,如tee /tmp/mysql.log 正誤均記錄 \c 或 CTRL+c #退出,如CTRL+d,exit,\q,quit等 \s 或 status #查看數據庫負載、版本及鏈接等狀態信息 \. 或 source #調用SQL腳本,如source world.sql; \u 或use #進入/切換數據庫,如use world
快捷鍵
上下翻頁 tab 補全表名 ctrl + C 退出 ctrl + L 清屏
命令幫助:mysqladmin --help 語法:mysqladmin -u<name> -p<password> commands
實例:
mysqladmin version
mysqladmin processlist
mysqladmin status
mysqladmin ping
mysqladmin shutdown
mysqladmin variables
命令幫助:mysqldump --help 基本語法: Usage: mysqldump [OPTIONS] database [tables] OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...] OR mysqldump [OPTIONS] --all-databases [OPTIONS]
定義對象:庫(名字、特性)、表(表名字、列信息)
對於庫定義:建立、刪除、修改(自己和庫中的對象->表,視圖,存儲過程,函數,觸發器)
表定義:建立(定義表結構)、刪除(對於表自己)、修改(只針對表結構非表內容)
查看庫
show databases; show databases like '%ban%'; #模糊匹配
建立庫定義
語法:CREATE DATABASE db_name CHARACTER SET charset_name COLLATE collation_name; 實例:create database banana; create database banana_tong character set gbk collate gbk_chinese_ci; #指定字符集建庫
說明:在一些SQL語句的結尾處要使用";"分號或者使用"\g"或"\G"來結束語句的運行
修改庫字符編碼
語法:ALTER DATABASE [db_name] CHARACTER SET charset_name COLLATE collation_name;
實例:alter database banana charset gbk;
刪除庫
drop database banana;
切庫
use baanana;
表屬性:字段、數據類型、索引 ==>默認:字符集、引擎
表定義(列->必須定義,至少一列):
表名、列名、列屬性(數據類型、列約束)
列定義的範圍說明:
1)數據類型->字符/數字
2)約束條件->子健、外鍵、惟一
3)列屬性->比較特殊的定義
定義表以前需先進入數據庫
use world;
建立表
語法:CREATE TABLE 表名 (列名 列定義) 實例:create table test(id int); create table student(idcard int ,name char(30),sex char(4)); #建立多列
查看錶結構
desc student;
查看建表語句
show create table student;
修改表定義(表名)
rename table student to test1;
alter table test1 rename to people;
添加表特性
alter table people add addr char(40) NOT NULL; alter table people add age int(4) after name; alter table people add tel varchar(15) first; #同時添加多個列定義 alter table people add id int(10) first,add sex char(4) after name;
刪除表結構(列字段)
alter table people drop sex;
修改表定義/數據類型
alter table people modify name char(20); alter table people change name people_name char(30);
用戶受權:grant
語法:GRANT ALL ON *.* TO 'user'@'localhost'; 實例:grant select,create,insert,update on banana.* to 'banana'@'10.0.0.%' identified by '123'; #建立用戶的同時進行受權
回收權限:revoke
語法:REVOKE INSERT ON *.* FROM sys@localhost; 實例:revoke drop,delete on banana.* from sys@localhost;
插入數據
語法:insert into <表名> [(<字段名1>[,..<字段名n > ])] values (值1 )[,(值n )] 實例:insert into banana values(1,'boy'); #插入一行數據 insert into banana values(1,'boy'), (2,'girl'); #插入多行數據 #只針對某一列插入數據 insert into test(id,name) values(1,'boy');
更新/修改表(切記要有where條件)
update test2 set name='haha' where name='girl';
刪除表內容(切記要有where條件)
delete from test where id=1; # 邏輯刪除,一行一行刪。 truncate table test; # 物理刪除,pages(block) ,效率高 insert into `test` values(1,'apple'),(2,'pear'),(3,'banana'), (4,'lemon'), (5,'orange')
01.爲表添加一個state列
TINYINT說明:即字段類型,若設置爲UNSIGNED類型,只能存儲從0到255的整數,不能用來儲存負數
1 mysql> alter table test2 add state tinyint(2) not null default 1; 2 mysql> desc test2; 3 4 +-------+----------+------+-----+---------+-------+ 5 | Field | Type | Null | Key | Default | Extra | 6 +-------+------------+------+-----+---------+-------+ 7 | id | int(11) | YES| | NULL | | 8 | name | varchar(20)| YES| | NULL | | 9 | state | tinyint(2) | NO | | 1 | | 10 +-------+-------------+------+-----+------+---+
02.查看當前的state狀態
1 mysql> select * from test2; 2 3 +----+---------+-------+ 4 | id | name | state | 5 +----+---------+-------+ 6 | 1 | boy | 1 | 7 | 2 | girl | 1 | 8 | 3 | inca | 1 | 9 | 4 | zuma | 1 |
03.更新並修改state數據爲0
1 mysql> update test2 set state=0 where name='boy'; 2 mysql> select * from test2; 3 4 +----+---------+-------+ 5 | id | name | state | 6 +----+---------+-------+ 7 | 1 | boy | 0 | 8 | 2 | girl | 1 | 9 | 3 | inca | 1 | 10 | 4 | zuma | 1 |
04.當查詢時使用where條件,此時只會顯示state=1的記錄,其效果與刪除相似
1 mysql> select * from test2 where state=1; 2 3 +----+---------+-------+ 4 | id | name | state | 5 +----+---------+-------+ 6 | 2 | girl | 1 | 7 | 3 | inca | 1 | 8 | 4 | zuma | 1 |
1 [root@db02 ~]# mysql -uroot -p123 -U 2 3 mysql> update test2 set name='oldgirl'; 4 5 ERROR 1175 (HY000): You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column
說明:mysql命令加上選項-U後,當發出沒有where或limit關鍵字的update或delete時,mysql程序拒絕執行
語法:SELECT <字段1,字段2,...> FROM <表名> WHERE <表達式>
其中,select、from、where是不能隨便改的,是關鍵字,支持大小寫
查看用戶的鏈接信息
select user,password,host from mysql.user; #模糊查詢數據 select user,password,host from mysql.user where user like 'sy%';
查看test2表中的信息
select * from sys.test2; #查看全部信息 select id,name from sys.test2;
特殊信息查詢
select id,name from test2 where id=2; select id,name from test2 where id>2 and id<4; #查看id大於2且小於4的記錄 select id,name from test2 where name='sys'; select id,name from test2 order by id asc; #提取記錄排序 select id,name from test2 order by limit 1,3; #顯示跳過第一行後的三行(須要與排序配合使用)
注意:select必須同from搭配使用
此筆記是本人學習摘記整理而成,此爲初稿(尚有諸多不完善之處),原創做品容許轉載,轉載時請務必以超連接形式標明文章原始出處,做者信息和本聲明,不然將追究法律責任。http://www.cnblogs.com/bananaaa/