Mysql數據庫的二進制安裝和基礎入門操作


前言:Mysql數據庫,知識非常的多,要想學精學通這塊知識,估計也要花費和學linux一樣的精力和時間。小編也是只會些毛皮,給大家分享一下~

一、MySQL安裝

(1)安裝方式:

1 、程序包yum安裝,下實驗一

  優點:安裝快,簡單

  缺點:定死了各個文件的地方,太死板

2 、二進制格式的程序包:展開至特定路徑,並經過簡單配置后即可使用(推薦),下實驗二

3 、源代碼:編譯安裝,太麻煩

 

(2)mysql 的程序組成:

Client:

  mysql :CLI 交互式客戶端程序

  mysqldump, mysqladmin...

Server:

  mysqld_safe mysql的備份

  mysqld

  mysqld_multi :多實例

服務器監聽的兩種socket 地址:

  ip socket: 監聽在tcp 的3306 端口,支持遠程通信

  unix sock: 監聽在sock 文件上(/tmp/mysql.sock,/var/lib/mysql/mysql.sock) ,僅支持本機通信

 

實驗一:yum源安裝MySQL和開啟設置服務

1、打開官方網站,上邊有各種版本的yum源,找到自己想要的版本設置yum源

https://downloads.mariadb.org/mariadb/repositories/

若上不了網,也可以使用自己光盤里的老版本

 

2、若不用自己的光盤老版本,要配置yum源,這里我選了10.2的版本

vim /etc/yum.repos.d/along.repo

[mariadb]

name = MariaDB

baseurl = http://yum.mariadb.org/10.2/centos7-amd64

gpgcheck=0

 

若有其他yum源,加一個enabled=0 先臨時關閉,yum clean all 清除緩存,注意:官方給的yum源安裝的Maria沒有安裝相依賴的包,還需自己安裝相依賴的包

 

3、yum安裝和開啟服務

這里,就直接安裝光盤里的老版本了

yum -y install mariadb-server

systemctl start mariadb 開啟服務

  ss -nutl 打開了3306的tcp端口

  查詢端口對應的進程信息 lsof -i :3306 或 netstat -tnlp | grep 3306

注意:開啟服務后,會多一個mysql的用戶,它的家目錄:存放數據庫,相當於數據庫中的每個表

mysql用戶是安裝包時,執行了個腳本,創建了mysql用戶,提示我們要是二進制安裝需創建用戶

rpm -q --scripts mariadb-server 可以查看這個腳本

 

 

4、mysql 運行

發現是root,能查能刪,很不安全

還能mysql xxx 匿名登錄

 

5、運行安全腳本

/usr/bin/mysql_secure_installation

 

實驗二:二進制安裝mariadb和開啟設置服務

注意:安裝之前要確保自己系統上沒有mariadb服務,有老版本可以先卸掉,刪除mysql用戶

1、去官網下載自己想要的版本 http://mariadb.org

rpm -qi mariadb 可以查詢官網

上傳,解包解壓縮

rz,tar xvf mariadb-10.2.8-linux-x86_64.tar.gz -C /usr/local/

(不像編譯安裝一樣,解包可以放在任何目錄,這個二進制安裝必須指定在這個目錄)

 

2、cd /usr/local/ 發現mariadb的目錄名字不符合要求

ln -s mariadb-10.2.8-linux-x86_64/ mysql 創建軟連接也可以改名

 

3、創建mysql用戶

useradd -d /app/mysqldb -r -m -s /sbin/nologin mysql

 

4、創建修改配置文件

ls support-files/ 包里自帶的有配置文件,但地方不對,要放在/etc/mysql/my.cnf

mkdir /etc/mysql

cp support-files/my-huge.cnf /etc/mysql/my.cnf 我們演示一個大的

vim /etc/mysql/my.cnf 修改配置文件

[mysqld]

datadir = /app/mysqldb //指定總目錄,必須的

innodb_file_per_table = on //讓每一個表數據庫都是一個文件,方便管理

skip_name_resolve = on //忽略名字的反向解析,加快速度

 

5、執行腳本,創建系統數據庫

cd /usr/local/mysql 一定要在這個目錄下執行腳本,因為腳本寫死了

./scripts/mysql_install_db --user=mysql --datadir=/app/mysqldb 執行腳本

完成后就會在/app/mysqldb/ 生成mysql系統數據庫

 

6、把服務腳本復制過去

cp support-files/mysql.server /etc/init.d/mysqld

chkconfig --add mysqld 設置服務在哪個運行級別,在哪個運行級別開啟服務

chkconfig --list mysqld

service mysqld start 失敗,看失敗原因:缺少日志文件,日志文件須有讀寫權限

 

7、創建配置文件

mkdir /var/log/mariadb/

touch /var/log/mariadb/mariadb.log

chown mysql /var/log/mariadb/mariadb.log

service mysqld start 開啟成功

設置PATH:

vim /etc/profile.d/mysql.sh

PATH=/usr/local/mysql/bin:$PATH

. /etc/profile.d/mysql.sh

 

8、運行安全初始化腳本,同上實驗

mysql_secure_installation

 

 

二、mysql基礎入門操作

1、命令行交互式命令:mysql

mysql 命令的選項:

  -uUSERNAME: 用戶名;默認為root

  -hHOST: 服務器主機; 默認為localhost

  -pPASSWORD :用戶的密碼; 建議使用-p, 默認為空密碼

 

2、mysql中一些的名詞

數據庫:database

表:table

索引:index

引擎:engines

列、字段:column

\G:豎着顯示

 

3、SQL 語句:(4大類)

DDL: Data Defination Language 數據定義語言,修改表結構

  CREATE(創建), DROP(刪除), ALTER(修改表結構)

DML: Data Manipulation Language 數據操作語言修改表里的數據

  INSERT, DELETE, UPDATE(更新數據)

DQL :Data Query Language 數據的查詢語言

  SELECT 用法多,非常靈活

DCL :Data Control Language 數據控制語言,授權限

  GRANT, REVOKE(取消授權)

 

、對數據庫的操作

1、查看數據庫:show databases;

查看某個數據庫中的表:show tables [from database_name] 如果已經在這個庫下,不用加from

數據庫有information_schema 庫,這個庫是只讀庫,只有root特殊權限的用戶登錄才能看到,不能drop刪除

數據庫有#mysql50#.mozilla 類似的庫的處理方法,因為mysql家目錄下有個隱藏文件導致,不能刪除

把這些隱藏文件移走就好了

 

2、創建數據庫:

CREATE DATABASE(數據庫) [IF NOT EXISTS](如果不存在,創建)'DB_NAME'; 創建成功一個,會生成一個表數據庫文件

  CHARACTER SET 'character set name' 設置字符集,不推薦設置,不建議調

  COLLATE 'collate name' 設置排序規則,不推薦設置

注意:數據庫對象的命名規則

必須以字母開頭

可包括數字和三個特殊字符(# _ $)

不要使用MySQL 的保留字

同一Schema(數據庫) 下的對象不能同名

 

3、刪除數據庫

DROP DATABASE [IF EXISTS] 'DB_NAME'; 刪除成功,會刪除對應的表數據庫文件

查看支持所有字符集:SHOW CHARACTER SET; 不需要改

查看支持所有排序規則:SHOW COLLATION; 不需要改

4、獲取命令使用幫助:mysql>help create database;

 

例:create database testdb;  創建testdb數據庫

drop database testdb;  刪除testdb數據庫

 

四、創建刪除表

1、查看數據庫中所有的表:show tables from base_name;

 查看表結構desc tbl_name;

 

2、創建表,依照范式

CREATE TABLE [IF NOT EXISTS] 'tbl_name' (col1 type1 修飾符, col2 type2 修飾符, ...)

字段信息:

• col type1 指定類型

• PRIMARY KEY(col1,...) ()復合主鍵

• INDEX(col1, ...) 索引

• UNIQUE KEY(col1, ...) 唯一鍵

表選項:

• ENGINE [=] engine_name (引擎設置,默認就好)

  SHOW ENGINES; 查看支持的engine 引擎類型

• ROW_FORMAT [=] {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT |COMPACT} 行的格式,默認就好

create table students3 select * [id,name] from students; 也可以創建一個表,完全復制另一個表的結構[或自己選擇的結構];復制的表沒有約束,如主鍵

insert into students3 select * from students; 有students3這個表,完全復制另一個表的內容

獲取創建表的幫助:mysql> HELP CREATE TABLE;

 

3、刪除表: DROP TABLE [IF EXISTS] 'tbl_name';

 

4、例子:

例1:CREATE TABLE testdb.students (id int UNSIGNED NOT NULL PRIMARY KEY,name VARCHAR (20) NOT NULL,age tinyint UNSIGNED);

解釋:創建testdb庫中名為students表;表有3列:id、name、age;id:數據類型int為正、不為空、設為主鍵;name:數據類型VARCHAR (20)、不為空;age:數據類型tinyint UNSIGNED)

 

例2:create table teachers (id int unsigned not null,name varchar(20) not null,age tinyint unsigned,primary key(id,name));

解釋:創建testdb庫中名為teachers表;表的復合主鍵為id和name列;其他和例1一樣

例3:create table students3 select *  from students;  創建students3復制students的內容

 

五、DDL語句:修改表結構,盡量不要改表結構,很少用

1、查看表結構:DESC [db_name.]tb_name;

2、修改表結構 alter

ALTER TABLE 'tbl_name'

  字段:

    添加字段:add

      ADD col1 data_type [FIRST加到第一段的后邊|AFTER col_name某一段的后邊]

    刪除字段:drop

    修改字段:change (字段名), modify (字段屬性)

    索引:

      添加索引:add

      刪除索引: drop

    表選項:

      修改:change

查看幫助:Help ALTER TABLE

 

3、例子:

Help ALTER TABLE 查看幫助

ALTER TABLE students3 RENAME s3; 改表名

ALTER TABLE s3 ADD phone varchar(11) AFTER name; 在s3表的name字段后加一個phone

ALTER TABLE s1 MODIFY phone int; 把phone的數據類型改為int

ALTER TABLE s1 CHANGE COLUMN phone mobile char(11); 把字段phone改名為字段mobile,數據類型為char(11)

ALTER TABLE s1 DROP COLUMN mobile; 刪除字段mobile

ALTER TABLE students ADD gender ENUM('m','f') 增加gender字段,為枚舉類型,只能是m或f

ALETR TABLE students CHANGE id sid int UNSIGNED NOT NULL PRIMARY KEY; 把修改id字段為sid,數據類型為正int、非空、主鍵

ALTER TABLE students ADD UNIQUE KEY(name); 在name字段加唯一鍵

ALTER TABLE students ADD INDEX(age); 在age字段加索引

DESC students; 查看這個表

SHOW INDEXES FROM students; 查看索引信息

ALTER TABLE students DROP age;

 

六、DML語句,修改表內容

1、查看

select * from tab_name [WHERE clause [LIMIT [m,]n];] 查看表中的所有內容,Limit m,n 跳過m行,要n行

select id,name,... from tab_name; 查出指定的表中內容

select count(*) from tab_name; 查看表中的記錄數量,count()是自帶的函數

 

2、修改表內容:

INSERT 添加,插入,下有例子

  INSERT [INTO] tbl_name[(col_name,...)] VALUES(val1,...),(...),... 下例2,3

  分析:① tbl_name后不加(),默認按表結構的列;若加(),前后()內容要對應,順序可以不按表結構,也可以設null值,但最好不要,

     ② 選項不是數字,都要加'',例:name='along'

insert into tab_name1 select * from tab_name2; 批量導數據,下例4

 

UPDATE: 更新,修改表內容,下有例子

  UPDATE tbl_name SET col1=val1, col2=val2, ... [WHERE clause] [ORDER BY 'col_name' [DESC]] [LIMIT [m,]n]; 下例5

 分析:若不加where,直接把所有列都修改了,Limit m,n 跳過m行,要n行

 

DELETE:刪除表內容,下有例子

  DELETE FROM tbl_name [WHERE clause] [ORDERBY 'col_name' [DESC]];可先排序再指定刪除的行數,下例6

  分析:若不加where,直接把所有列都刪除了

TRUNCATE TABLE tbl_name; 清空表,快速清空,刪除的時候,不計日志,謹慎使用

 

3、例子

① select * from students limit 3,2;

② insert into students(id,name,age) values(1,'along',18); 添加1行信息

③ insert into students values(2,'xiaoming',19),(3,'xiaohong',20); 添加2,3行信息

④ insert s2 select * from students; 復制students表的信息到s2表中

⑤ update s2 set name='xiaohei',age=30 where id=2; 修改id=2行的內容

⑥ delete from s2 where id=3; 刪除s2表的id=3的行

 

七、DQL 語句,select

DQL :SELECT,用法很多

SELECT col1,col2,... FROM tbl_name [WHERE clause] [ORDER BY 'col_name' [DESC]] [LIMIT [m,]n]; 查詢表內容信息,上例1

1、字段表示法:

  *: 所有字段

  as :字段別名,若事先做好了表,想要把列的英語改成中文,不用修改,可以直接用別名,下例1

 

2、排序:order by col_name [desc]

  解釋:by后指定列,desc反向排序,反向也可以-col_name

  注意:若其中有空值,正向排序空值在第一行,反向排序空值在最后一行,可以order by -col_name desc 即正向排序,有把空值放在最后一行,下例2

 

3、WHERE clause:where 后的選項

操作符:下例3

  >, <, >=, <=, ==, !=

  BETWEEN ... AND ...

  LIKE:模糊匹配,

    % :任意長度的任意字符

    _ :任意單個字符;

  RLIKE :正則表達式模式匹配

  IS NULL ,IS NOT NULL 尋找空值,不能用=,只能用is,所以最好不要有null,不好管理

  IN (val1,val2,…) 離散值顯示

條件邏輯操作:

  and ,or ,not

 

例子:

① select id as 學生編號,name 姓名,age 年齡 from students; 設置別名

② select * from students order by -age desc; 按年齡的列正向排序,null在最后

③ select * from students where age>=20; 顯示age>=20的

select * from students where age between 18 and 20; 顯示18-20的

select * from students where name like 'xiao%'; 顯示name是xiao開頭的

select * from students where name rlike 'ng$'; 顯示name是ng結尾的

select * from s2 where age is null; 顯示null值的行

select * from students where age in (18,20,30); 顯示age=18,20,30的行

 

 

八、DCL 數據控制語言,授權限

(1)用戶賬號

1、用戶賬號:'user'@'host'

  user: 用戶名

  host: 允許用戶通過哪些主機遠程連接mysqld 服務

    IP 、網絡地址、主機名、通配符(% 和_)

2、創建用戶:

CREATE USER 'username'@'host' [IDENTIFIED BY 'password'];

例:create user 'along'@'192.168.30.%' identified by 'centos'; 添加along賬號在192.168.30這個網段,可以輸centos密碼連接

注意:這里的賬號和linux的用戶不是一個東西

 

3、查看當前等登錄的用戶:

SELECT user();

4、查看已經添加的用戶:

SELECT User,Host,Password FROM mysql.user;

 

5、刪除用戶:DROP USER 'username'@'host';

示例:drop user'along'@'192.168.30.107';

 

6、更改口令:多用第一種

SET PASSWORD FOR 'user'@'host' = PASSWORD('password');

  分析:password();是調用了自帶的函數

  例:set password for 'along'@'192.168.30.%'=password('along');

② UPDATE user SET password=PASSWORD('magedu') WHERE User='root';

  注意:相當於改了user的表,不推薦用,修改表的命令不會馬上生效,需執行FLUSH PRIVILEGES 刷新一下生效

③ /usr/local/mysql/bin/mysqladmin -u root –poldpassword password 'newpassword'

注意:僅創建的用戶,其所擁有的權限很小,所以我們要進行授權

 

(2)DCL,授權,回收權限

1、授權

GRANT priv_type,... ON [object_type] db_name.tb_name TO 'user'@'host' [IDENTIFIED BY 'password'] [WITHGRANT OPTION]; 授權並創建賬號

① priv_type: ALL [PRIVILEGES] 授權類型:

   insert增,delete刪 , update改,select查,all所有權限

② db_name.tb_name: 對哪個數據庫的哪個表授權:

  *.*: 所有庫的所表

  db_name.*: 指定庫的所有表

  db_name.tb_name: 指定庫的指定表

  db_name.routine_name :指定庫的存儲過程和函數

例:grant all on test.* to 'along2'@'%' identified by 'centos'; 創建along2用戶,允許其在所有主機通過centos密碼登錄,對test庫的所有表有所有權限

 

2、回收授權:

REVOKE priv_type, ... ON db_name.tb_name FROM 'user'@'host

例:revoke delete on test.* from 'along2'@'%'; 回收along2@'%'用戶對test庫的所有表的刪除權限

 

注意:

① MariaDB 服務進程啟動時會讀取mysql 庫中所有授權表至內存

② GRANT 或REVOKE 等執行權限操作會保存於系統表中,MariaDB 的服務進程通常會自動重讀授權表,使之生效

③ 對於不能夠或不能及時重讀授權表的命令,可手動讓MariaDB 的服務進程重讀授權表:

mysql> FLUSH PRIVILEGES;

 

好了,關於mysql,小編也只是剛接觸,感覺自己還在門外,希望大家一起進步!!!


免責聲明!

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



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