一:數據庫的安裝
第一步 下載數據庫到主機,,
第二步 通過xshell將數據庫壓縮包上傳至centos7虛擬主機(#注意:服務器主機需下載上傳工具lrzsz 命令:yun -y install lrzsz)
第三步 解壓縮數據庫安裝包
[root@es1 opt]# tar -xf mysql-5.7.25-1.el7.x86_64.rpm-bundle.tar
[root@es1 opt]# ls #查看有這么些安裝包 mysql-5.7.25-1.el7.x86_64.rpm-bundle.tar mysql-community-client-5.7.25-1.el7.x86_64.rpm mysql-community-common-5.7.25-1.el7.x86_64.rpm mysql-community-devel-5.7.25-1.el7.x86_64.rpm mysql-community-embedded-5.7.25-1.el7.x86_64.rpm mysql-community-embedded-compat-5.7.25-1.el7.x86_64.rpm mysql-community-embedded-devel-5.7.25-1.el7.x86_64.rpm mysql-community-libs-5.7.25-1.el7.x86_64.rpm mysql-community-libs-compat-5.7.25-1.el7.x86_64.rpm mysql-community-server-5.7.25-1.el7.x86_64.rpm mysql-community-test-5.7.25-1.el7.x86_64.rpm
第五步安裝依賴:
[root@es1 opt]# yum -y install perl-Data-Dumper perl-JSON perl-Time-Hires
第六步安裝數據庫
[root@es1 opt]# rpm -Uvh mysql-community-*.rpm
警告:mysql-community-client-5.7.25-1.el7.x86_64.rpm: 頭V3 DSA/SHA1 Signature, 密鑰 ID 5072e1f5: NOKEY
准備中... ################################# [100%]
正在升級/安裝...
1:mysql-community-common-5.7.25-1.e################################# [ 9%]
2:mysql-community-libs-5.7.25-1.el7################################# [ 18%]
3:mysql-community-client-5.7.25-1.e################################# [ 27%]
4:mysql-community-server-5.7.25-1.e################################# [ 36%]
5:mysql-community-devel-5.7.25-1.el################################# [ 45%]
6:mysql-community-embedded-5.7.25-1################################# [ 55%]
7:mysql-community-embedded-devel-5.################################# [ 64%]
8:mysql-community-test-5.7.25-1.el7################################# [ 73%]
9:mysql-community-libs-compat-5.7.2################################# [ 82%]
10:mysql-community-embedded-compat-5################################# [ 91%]
正在清理/刪除...
11:mariadb-libs-1:5.5.60-1.el7_5 ################################# [100%]
[root@es1 opt]# systemctl start mysqld #重啟數據庫
注意:初次使用數據庫時因沒有設置數據庫密碼而無法登錄
MySQL 5.7 默認采用的存儲引擎不再是 MyISAM,而是 InnoDB。初始化時若相關的文件不存在,會自
動創建並設置相關參數
mysql5.7以上的版本數據庫管理賬號密碼不能為空,安裝數據庫的時候會隨機生成密碼
第六步 查看數據庫初始密碼並登錄
[root@es1 log]# grep 'temporary password' mysqld.log
2019-04-19T08:12:09.726034Z 1 [Note] A temporary password is generated for root@localhost: eqj.AB1g,bIG
[root@es1 ~]# mysql -uroot -peqj.AB1g,bIG #登錄數據庫
[root@es1 ~]# systemctl is-enabled mysqld.service #查看數據庫服務狀態是否是開機自啟
[root@es1 ~]# netstat -antlp |grep mysql #查看數據庫狀態
tcp6 0 0 :::3306 :::* LISTEN 8978/mysqld
第七步 登錄數據庫
初次安裝數據庫使用初始密碼登錄后無法進行任何數據庫操作提示如下:
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
我們需要設置密碼才可進行操作
1:修改密碼前 mysql>show variables like "%password% //查找變量信息 2:修改密碼策略 mysql>set global validate_password_policy=0 (0 只檢查長度 ,1 檢查長度+字符, 2 檢查長度+字符+字典) mysql>set global validate_password_length=6 指定長度 3:修改數據庫密碼 mysql>alter user root@"localhost" identified by"123456";
修改密碼后就可以對數據庫進行操作:
二: 數據庫的設置及使用
1數據庫的配置
數據庫的主配置文件 /etc/my.cnf
數據庫目錄 /var/lib/mysql 存儲數據的文件
mysql> status -------------- mysql Ver 14.14 Distrib 5.7.25, for Linux (x86_64) using EditLine wrapper Connection id: 8 Current database: haha Current user: root@localhost SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server version: 5.7.25 MySQL Community Server (GPL) Protocol version: 10 Connection: Localhost via UNIX socket Server characterset: latin1 #數據庫服務使用的編碼格式 Db characterset: latin1 #寫入數據庫使用的編碼 Client characterset: utf8 Conn. characterset: utf8
修改數據庫的編碼格式 /etc/my.cnf
[client] default-character-set=utf8 [mysqld] character-set-server=utf8
重啟數據庫
[root@es1 ~]# systemctl restart mysqld
2數據庫的使用
1 選擇庫,創建庫 命名規則 : 區分子母大小寫(數字字母下划線)(不可以重名 不能是純數字 特殊字符 關鍵詞) 在數據庫目錄下建庫建表,所有者所屬組是 mysql 在/var/lib/myssql 文件下建庫建表,所有者所屬組是 root mysql> show databases;查看庫 mysql>create database 庫名; mysql>use 庫名 切換庫 drop 可以刪庫刪表刪用戶。 mysql>drop database 庫名; 將不同網站的 信息存儲在不同的數據庫中,如:購物網站的數據信息存儲在購物庫中方便管理, 2 創建表 mysql> select * frclauseom 表名; //查看當前庫下的表 mysql>show tables; 查看表 mysql>create table 表名(字段 1 、字段 2、字段 3、字段 4);==>字段名 mysql>desc 表名; (查看表字段) 3 插入數據(行) mysql>select 字段 from 表名;(查看表內容) mysql>insert into 表名 values(“字段 1 ”,值 1),("字段 2",值 2):
4 刪除表 mysql>drop table 表名;//對應數據庫文件中的表也會刪除
1 查看表的創建命令 mysql>show create table 表名; 2 指定表使用的字符集, mysql>create table 表(字段 1 值 1) >default characted set utf8; //只對當前表永久生效 3修改表結構 alter table 表名 add 添加新字段 int(4 字節) alter table 表名 add 字段名 4 drop 刪除已有字段 alter table 表名 drop 字段名(刪除須謹慎,預先備份。) 5 modify 修改字段類型(修改時不能與字段已存儲的數據沖突,若沖突不允許修改,不修改部分須原樣寫上) alter table 表名 modify 字 段中不修改的字符+要修改的字符 6 change 修改字段名(改字段名同時可以改類型) alter table 表名 change 原字段 新字段(相同部分原樣寫上) 7 移動字段位置(將字段 1 移到字段 2 的后面) Alter table 表名 modify 字段 1 類型 after 字段 2 alter table t5 modify age int(2)unsigned default 19 after name; 8 Rename 修改表名 altert table 表名 rename 新表名(新表名必須唯一); mysql>system 在系統狀態下執行系統命令;
3數據庫的字符類型
char(255 字符) varchar(65532 字符)盡量少用 blob text 超大文本 數值類型:整數 tyinint(微小整數-128~127)unsigned(無符號 必須在類型的后面) int(2^32 -1)常用類型。 smallint mediumint bgint (無符號存儲范圍) 浮點型 :帶小數點的 float:(N(數字總位數),M(小數總位數)); double: 枚舉類型:只能在列舉的范圍內選擇。 年 year yyyy 2017 (0-69 2000-2069 ; >69 >1969) 月 date yyyymmdd 20171120 日 time hhmmss 日期時間 datetime/timestmap yyyymmddhhmmss 設置表的字符集
4 數據庫的字符類型 及索引
1、mysql 鍵值:限制如何給字段賦值給字段的值排序 索引的優點與缺點 定義:類似於“書的目錄” 優點:通過創建唯一索引可以保證數據庫表中每一行數據的唯一性,方便查找,提高數據查詢速度 。 缺點:①站物理存儲空間,②修改速度慢。 2、普通索引 index(①一個表中可以有多個index字段②可以賦空值,③可以重復) 經常把做查詢條件的字段設置為index字段 查看: desc 表名; (index字段的key標志是 null(空)) show index from 表名\G; BTREE 二叉樹算法(分段) 創建: ①已有表添加索引 create index 索引名 on 表(字段名); ②建表時建索引 create table 表名(字段 1 類型 1,字段 2類型 2, index(字段名)); 驗證:show index from 表名\G; 刪除 drop index 索引名 表名; 3、唯一索引 unique(字段的值不能重復,可以賦空值) 查看 創建 ①建表時 create table 表名(字段 1,字段 2,字段 3 ,unique(字段名_id)); ②建表后 create unique index 索引名 On 表名 (字段名); 驗證 刪除 drop index 索引名 on 表名; 4、主鍵 primary key(PRI)(表中只能有一個主鍵(字段的值不能重復,不能賦空值)) 查看(PRI) 創建 建表時建索引 create table 表名(字段 1 類型 1,字段 2 類型 2, primary key(字段名)); create table 表名(字段名 類型 約束, primary key字段列表); 在已有表中添加主鍵 alter table 表名 add primary key(字段名); 驗證 刪除 alter table 表 drop primary key; 5、復合主鍵(不同嗯時重復 即可) 建表時建索引 create table 表名(字段 1 類型 1,字段 2類型 2, primary key(字段 1,字段 2)); 添加主鍵(將表中一樣的記錄刪除)然后再添加, alter table 表名 add primary key(字段 1,字段 2); primary key 與 auto_increment 連用 自動增長 i++ i=$i+1 create table 表名 (id int(2)) zerofill primary key auto_increment; 條件:(必須是主鍵,必須是數值類型) 注意:再修改主鍵位置時,zhineng 6、外鍵 foreign key 作用:為了保持數據的一致性 約束:給外鍵字段賦值時,值只能在指定表中指定字段值的范圍內選擇。 cwtab 財務表 cw_id name pay 9 bob 20000 7 bob 20000 bjtab 班級表 stu_id name 1 jim 2 jim 3 lucy 規則: 1、表的存儲引擎必須是 innodb, 2、字段類型要一致,寬度一樣, 3、(被參照的字段必須是索引的一種,一般是主鍵) 查看 創建 : create table 表 1 (字段 1,字段 2, )engine =innodb;指定存儲引擎。 create table 表 2 (字段 1,字段 2,字段 3 ,foreign 字段 1 references 表 1 (字段 1) on cascade update on cascade delete)engine=innodb; cascade update on cascade delete 同步更新,同步刪除。 表 2 參照表 1 中的字段 1;保持數據的一致性。 驗證: 同步更新 update 表 1 set 字段值 where 新字段值 (修改記錄) 同步刪除 delete from 表1 where 字段值; // 刪除須謹慎。 查看建表 show create table 表 ; 刪除外鍵 alter table 表 drop foreign key 外鍵名; *****注意事項**** 修改參考表時,必須在被參考表中的外鍵的值的范圍。存儲引擎 定義:mysql 數據庫服務器自帶的功能程序,不同的存儲引擎有不同的功能和存儲方式 。用來處理表的處理器。 查看 mysql 數據庫服務器支持的存儲引擎 show engines; 修改 mysql 服務默認使用的存儲引擎。 vim /etc/my.cnf default-storage-engine= :wq #systemctl restat mysqld 登入數據庫查看存儲引擎 show engines; 建表時指定 (只有 innodb 支持外鍵功能) create table 表名( 字段名 列表名) engine=存儲引擎名 修改表使用的存儲引擎 alter table 表名 engine=存儲引擎名; 修改表的搜索引擎 相應的功能和存儲位置都會相應的改變 myisam 特點 不支持外鍵/事務/事務回滾 支持表級鎖( 理解為鎖住整個表,可以同時讀,寫不行) 表級鎖:開銷小,占內存小,加鎖快;不會出現死鎖;鎖定粒度大,發生鎖沖突的概率最高,並發度最低。 innodb 特點 支持外鍵/事務/事務回滾 支持行級鎖(僅對指定的記錄進行加鎖,這樣其它進程還是可以對同一個表中的其它記錄進行操作。) 行級鎖:開銷大,占內存大,加鎖慢;會出現死鎖;鎖定粒度最小,發生鎖沖突的概率最低,並發度也最高。 事務日志 /var/lib/mysql/ ib_logfile0 ib_logfile1 --sql 命令 ibdata1 --數據信息 事務: 一次數據訪問從開始連接到斷開連接的過程。 特點 : 唯一性 、一致性 隔離性 原子性
5 數據庫的導入導出
默認搜索系統文件目錄 /var/lib/mysql-files/
查看默認搜索路徑
show variables like "secure_file_priv";
system cp /etc/passwd /var/lib/mysql-files/
導入文件
load data infile "/var/lib/mysql-files/passwd" into table user fields terminated by ":" linesterminated by "/";
修改默認導入路徑
[mysqld] secure_file_priv=/mydata # 指定默認導出路徑 default-storage-engine=myisam #指定搜索引擎
數據導出:
數據的導出: 把記錄存儲到系統文件里 #ls -ld /mydata //查看其權限 #chmod 0+w /mydata/ 數據導出 select * from user into out "/mydata/a1.txt"; -----------------------------公式--------------------------------------------- mysql>sql 查詢 into outfile "目錄名/文件名"; mysql>sql 查詢 into outfile "目錄名/文件名" fields terminated By "分隔符號" ; mysql>sql 查詢 into outfile " 目 錄 名 / 文 件 名 " fields terminated by “符號” lines terminated by "分隔符號";
6 數據庫的查詢操作
插入表記錄
insert into 庫.表 values(字段列表); insert into 庫.表(字段名列表) values (字段值列表);
查詢表記錄
seclect 字段名列表 from 庫表.表 where 條件; select * from user ; select id,name,homedir from user; select id,name,homedir from user where id <=10 前 10 行 select * from user where id=50 第五十行 數據庫邏輯運算符 數值比較 = != > >= < <= 字符比較 = != 范圍內查找 字段名 in (值列表) 字段名 not in (值列表) 字段名 between 數字 1 and 數字 2 匹配空 is null 匹配非空 is not null 邏輯與 or 邏輯非 and 即有與,又有非,先與后非 如需改變須加()改變其優先級。 distinct 重復 select distinct shell from user where uid<1000 數值計算 在 user 表中添加字段 alter table user add age tinyint(2) unsigned default 21 after name, add system tinyint default 60 after age, add service tinyint(2) default 60 after system; 計算 service system 的和 、平均值。 select name system,service,system+service he,(system+service)/2 pjz,age s_year from user where name=“root”; 模糊查詢 like where 字段名 like '表達式' _任意一個字符 以 r 開頭的 4 個字符的 select name from user where name like 'r____'; % 0 個或多個字符 select name from user where name like '_%_'; 名字至少是兩個或兩個以上字符的, select id,name from user where name like "%" having name is null; %不包括空值。 select id,name from user where name like "%a%"; 名字里面包含字母 a 的 select id,name from user where name like "_a_"; having 在查找結果里查找數據。 正則匹配 seclect 字段名列表 from 庫表.表 where 條件; 條件中添加正着匹配 where 字段名 regexp “正着表達式” select name from user where name regexp '[0-9]'; //查找名字中有數字的用戶 .. 包含兩個字符 ^..$ 只能是兩個字符 s$以 s 結尾的 結尾$ 開頭^a.*t$ 以 a 開頭以 t 結尾中間任意。 聚集函數 (對字段值做統計) min 字段名 最小值 max 字段名 最大值 avg 字段名 平均值 sum 字段名 求和 count 字段名 統計字段值的個數 select count(id) from user; //統計行 select count(name) from user where shell="/bin/bash"; //統計 shell 用戶的個數 select count(name) from user where uid<1000; 統計 uid<1000 的用戶的個數 select sum(system) from user where uid<10 前十位用戶的系統成績的求和 select avg(service) from user;求服務成績的平均值。 查詢排序 sql 查詢 order by 字段名 排序行時(升序 ASC/降序 DESC) select name,uid from user where shell!="/bin/bash" orde by desc ; (降 序 查 詢 shell 不 是 /bin/bash) 查詢分組 select distinct shell from user; select shell from user group by shell; 查詢 shell 的種類。 select shell from user where uid<=10 group by shell; //uid<=10 的 shell 的種類 hving shell=“rsyc” select shell from user group by shell having shell="/bin/bash";查詢有沒有/bin/bash 的這種 shell。 select 專業 from school where 性別=“女” group by 專業; //查找學校里面的女生專業 限制顯示查詢結果記錄的行數 limit select id,name,uid,homedir from user limit 1,2; 前一個數是從第幾行開始顯示,第二個數是顯示幾行。 select id,name,uid from user order by desc limit 2; 找出 uid 最大的兩行。 sql 查詢結果 into outfile “/mydata/top5.txt” 單表查詢 select 字段名列表 from 表名 where 條件; 嵌套查詢(where 子查詢) select 字段名列表 from 表名 where 條件 (select 字段名列表 from 表名 where 條件); 多表查詢。 select name,system from user where system > (select avg(system) from user); select name from user where name not in (select name from game.cwtab); 修改記錄 update 庫.表 set 字段名=“值”, 字段名=值; update 庫.表 set 字段名=“值”, 字段名=值 where 條件; 刪除記錄 delete from 庫.表 where 條件; delete from user where name ="null" 表的復制及改名 1、表的復制 ①全復制源表內容:Create table 新表 select * from 源表; ②部分復制源表內容:create table 新表 select 字段 from 源表; ③復制源表僅字段:create table 新表 select * from 源表 where false; 2、表的改名: alter table 舊表 rename 新表; 多表查詢 1、概述: ①將2個或2個以上的表按某個條件連接起來,從中選取需要的數據。 Select 字段名列表 from 表a,表b;(同庫多表) Select 字段名列表 from 庫1.表a,庫2.表b;(異庫多表) ②當多個表中存在相同意義的字段 (字段名可以不同)時可以通過改字段連接多個表。 Select 字段名列表 from 表a,表b where 條件;(同庫多表) Select 字段名列表 from 庫1.表a,庫1表a where 條件(異庫多表) 外連接查詢 左連接查詢select 字段名列表 from 表a left join 表b on 條件;(顯示:表b在表a的左邊) 右連接查詢select 字段名列表 from 表a right join 表b on 條件;(顯示:表b在表a的右邊
四 密碼管理
① 停止Mysql服務程序 ② 跳過授權表啟動mysql服務程序 #Vim /etc/my.cnf [mysql] skip-grant-tables #systemctl restart mysqld ③ 重設root密碼(更新user表記錄) >mysql (跳過授權表后登錄數據庫) >update mysql.user set authentication_string=password(“abc123”) where user=”root” and host=”localhost”; >flush privileges //刷新授權表 (修改myql庫中user表中保存密碼authentication_string) >quit ④ 以正常方式重啟MySQL服務程序 注釋#skip-grant-tables 重啟數據庫 以現有密碼‘abc123’登錄數據庫
2設置管理密碼
2、設置管理源密碼 ① 查看模塊 #find / -name “validate_password.so” ② 修改配置文件 #vim /etc/my.cnf Plugin-load=validate_password.so //加載模塊 Validate-password=force_plus_permanent //永久啟用模塊 Validate_password_policy=0 //只驗證密碼長度 Validate_password_length=6 //指定密碼長 ③ 重起服務 ④ 用shell命令行修改登錄密碼(須輸入舊密碼驗證,不適用跳過授權表啟動的情況) #mysqladmin -hlocalhost -uroot -p password ”新密碼” Enter password: //輸入舊密碼驗證 ⑤ 起服務
五 創建授權
1、Mysql授權庫和信息表 ① User表,存儲授權用戶的訪問權限 ② db表,存儲授權用戶對數據庫的訪問權限 ③ Tables_priv表,存儲授權用戶對表的訪問權限 ④ Columns_priv表,存儲授權用戶對字段的訪問權限 2、配置授權 ① Grant 權限列表 on 庫名.表名 to 用戶名@’客戶端地址’ identified by ‘密碼’ with grant option; 是否有授權權限 權限列表 ①all的時候代表所有權限 ②select查詢、insert插入、update更新、delete刪除權限 庫名表名 :是*.*所有庫所有表 客戶端地址: ①%匹配所有主機②192.168.4.%匹配一個網段③%tarena.com 匹配一個dns 域 本機地址:用戶名@’localhost’ 3、自己Show 查看用戶的權限 ① Show grants\G; ② 管理員查看其他用戶的權限 show grants for 用戶名@’客戶端地址’; 4、重設授權用戶修改密碼 ① 授權用戶修改自己的密碼 Set password=password(‘新密碼’); ② 管理員重設其他用戶的密碼 Set password for 用戶名@’客戶端地址’ =password(‘新密碼’); 5、撤銷用戶權限 Revoke 權限列表 on 庫名.表名 from 用戶名@’客戶端地址’; Drop user user@’cilent’;
六 數據庫的備份與恢復
1)、物理備份 備份 ① cp -rp /var/lib/mysql/mysql 備份目錄/文件名 ② tar -zcvf xxx.tar.gz /var/lib/mysql/數據庫名 恢復 ① cp -rp 備份目錄/文件名 /var/lib/mysql/ ② tar -zxvf xxx.tar.gz -C /var/lib/mysql/數據庫名 ③ 修改權限用戶所屬chown mysql /var/lib/mysql/mysql 2)、邏輯備份 完全備份 ① Mysqldump 源庫名 > 路徑/xxx.sql 完全恢復 ② Mysql 目標庫名 < 路徑/xxx.sql 注意:無論備份還是恢復,都需要驗證用戶及權限 缺點:備份與修復時鎖表導致訪問延時。
完全備份 #mkdir /alldb.sql #mysqldump -uroot -p --all-databases >/alldb.sql 導出數據 #Ls - lh *.sql 恢復 >create database alldb1; exit #mysql -uroot -p alldb1<alldb.sql 導入數據
數據備份的一些參數
--all-databases 所有庫 數據庫名 指定單個庫 數據庫名 表名 指定庫指定表 -B 數據庫1 數據庫2 備份多個庫