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

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

 
 

1、MySQL安裝

(1)安裝方式:mysql

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

  優勢:安裝快,簡單正則表達式

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

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

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

 

(2)mysql 的程序組成:centos

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和開啓設置服務

一、打開官方網站,上邊有各類版本的yum源,找到本身想要的版本設置yum源

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

若上不了網,也可使用本身光盤裏的老版本

 

二、若不用本身的光盤老版本,要配置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沒有安裝相依賴的包,還需本身安裝相依賴的包

 

三、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 能夠查看這個腳本

 

 

四、mysql 運行

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

還能mysql xxx 匿名登陸

 

五、運行安全腳本

/usr/bin/mysql_secure_installation

 

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

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

一、去官網下載本身想要的版本 http://mariadb.org

rpm -qi mariadb 能夠查詢官網

上傳,解包解壓縮

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

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

 

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

ln -s mariadb-10.2.8-linux-x86_64/ mysql 建立軟鏈接也能夠更名

 

三、建立mysql用戶

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

 

四、建立修改配置文件

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 //忽略名字的反向解析,加快速度
複製代碼

 

五、執行腳本,建立系統數據庫

cd /usr/local/mysql 必定要在這個目錄下執行腳本,由於腳本寫死了

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

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

 

六、把服務腳本複製過去

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

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

chkconfig --list mysqld

service mysqld start 失敗,看失敗緣由:缺乏日誌文件,日誌文件須有讀寫權限

 

七、建立配置文件

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

 

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

mysql_secure_installation

 

 

2、mysql基礎入門操做

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

mysql 命令的選項:

  -uUSERNAME: 用戶名;默認爲root

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

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

 

二、mysql中一些的名詞

數據庫:database

表:table

索引:index

引擎:engines

列、字段:column

\G:豎着顯示

 

三、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(取消受權)

 

、對數據庫的操做

一、查看數據庫:show databases;

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

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

數據庫有#mysql50#.mozilla 相似的庫的處理方法,由於mysql家目錄下有個隱藏文件致使,不能刪除

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

 

二、建立數據庫:

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

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

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

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

必須以字母開頭

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

不要使用MySQL 的保留字

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

 

三、刪除數據庫

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

查看支持全部字符集:SHOW CHARACTER SET; 不須要改

查看支持全部排序規則:SHOW COLLATION; 不須要改

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

 

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

drop database testdb;  刪除testdb數據庫

 

4、建立刪除表

一、查看數據庫中全部的表:show tables from base_name;

 查看錶結構desc tbl_name;

 

二、建立表,依照範式

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;

 

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

 

四、例子:

例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的內容

 

5、DDL語句:修改表結構,儘可能不要改表結構,不多用

一、查看錶結構:DESC [db_name.]tb_name;

二、修改表結構 alter

ALTER TABLE 'tbl_name'

  字段:

    添加字段:add

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

    刪除字段:drop

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

    索引:

      添加索引:add

      刪除索引: drop

    表選項:

      修改:change

查看幫助:Help ALTER TABLE

 

三、例子:

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;

 

6、DML語句,修改表內容

一、查看

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()是自帶的函數

 

二、修改表內容:

• 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; 清空表,快速清空,刪除的時候,不計日誌,謹慎使用

 

三、例子

① 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的行

 

7、DQL 語句,select

DQL :SELECT,用法不少

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

一、字段表示法:

  *: 全部字段

  as :字段別名,若事先作好了表,想要把列的英語改爲中文,不用修改,能夠直接用別名,下例1

 

二、排序:order by col_name [desc]

  解釋:by後指定列,desc反向排序,反向也能夠-col_name

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

 

三、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的行

 

 

8、DCL 數據控制語言,受權限

(1)用戶帳號

一、用戶帳號:'user'@'host'

  user: 用戶名

  host: 容許用戶經過哪些主機遠程鏈接mysqld 服務

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

二、建立用戶:

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

例:create user 'along'@'192.168.30.%' identified by 'centos'; 添加along帳號在192.168.30這個網段,能夠輸centos密碼鏈接

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

 

三、查看當前等登陸的用戶:

SELECT user();

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

SELECT User,Host,Password FROM mysql.user;

 

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

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

 

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

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,受權,回收權限

一、受權

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庫的全部表有全部權限

 

二、回收受權:

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

相關文章
相關標籤/搜索