centos7 mysql數據庫的安裝與使用


一:數據庫的安裝

第一步 下載數據庫到主機,,

第二步 通過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 <=1010 行
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    備份多個庫


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM