MySQL基本管理


數據庫基本管理

一 MySQL啟動關閉流程

mysql是一個典型的C/S服務結構

1.mysql自帶的客戶端程序(/service/mysql/bin)
	mysql
	mysqladmin
	mysqldump

2.mysqld一個二進制程序,后台的守護進程
	單進程
	多線程

1.1 啟動數據庫

1、/etc/init.d/mysqld start ---> mysql.server ---> mysqld_safe ---> mysqld
2、systemctl start mysql ---> mysqld_safe ---> mysqld
3、mysqld_safe --defaults-file=/etc/my.cnf ---> mysqld_safe ---> mysqld

1.2 停止數據庫

/etc/init.d/mysqld stop
systemctl stop mysqld

# 如果是自己用命令如mysqld_safe啟動的mysql,可以用mysqladmin來關閉
mysqladmin -uroot -p123 shutdown  

# 無論如何都不建議使用
kill -9 pid
killall mysqld
pkill mysqld

# 直接kill數據庫可能會出現問題:
1.如果在業務繁忙的情況下,數據庫不會釋放pid和sock文件
2.號稱可以達到和Oracle一樣的安全性,但是並不能100%達到
3.在業務繁忙的情況下,丟數據(補救措施,高可用)

二 MySQL設置密碼

初始狀態下,管理員root,密碼為空,默認只允許從本機登錄localhost

#  設置初始密碼 由於原密碼為空,因此-p可以不用
[root@jason ~]# mysqladmin -uroot password "123"    

# 修改mysql密碼,因為已經有密碼了,所以必須輸入原密碼才能設置新密碼
[root@jason ~]# mysqladmin -uroot -p"123" password "456"        

三 mysql連接工具與方式

3.1 mysql自帶的連接命令 mysql

mysql命令介紹

mysql
#常見的特定於客戶機的連接選項:
-u:				指定用戶  mysql -uroot
-p:				指定密碼  mysql -uroot -p567
-h:				指定主機域  mysql -uroot -p567 -h127.0.0.1
-P:				指定端口	mysql -uroot -p567 -h127.0.0.1 -P3307
-S:				指定socket文件 mysql -uroot -p567 -S /tmp/mysql.sock
-e:				指定SQL語句(庫外執行SQL語句) mysql -uroot -p567 -e "show databases;"
#--protocol:      指定連接方式 mysql --protocol=TCP  --protocol=socket

使用密碼登錄

#1.正確登錄命令
[root@db01 scripts]# mysql -uroot -p123
[root@db01 scripts]# mysql -u root -p123
[root@jason ~]# mysql  # 以root用戶登錄本機,密碼為空

#2.錯誤登錄命令
[root@db01 scripts]# mysql -u root -p 123  # -p選項與密碼之間不要有空格

兩種連接方式

1.TCP/IP的連接方式
2.套接字連接方式,socket連接

#查看連接方式
mysql> status;
--------------
Connection:		Localhost via UNIX socket

3.舉例:
	3.1.TCP/IP連接,通常帶有-h選項的都是TCP/IP鏈接
	mysql -uroot -p -h127.0.0.1 -P 端口號
	mysql -uroot -p -h127.0.0.1 -S /tmp/mysql.sock
	
	3.2.socket連接
	mysql -uroot -p123(默認連接方式,socket)
	
4.注意:
	4.1.因為使用TCP/IP連接,需要建立三次握手
	4.2.不一定-h都是tcp,-hlocalhost是socket連接
		mysql -uroot -p -hlocalhost

3.2 第三方的連接工具

1.sqlyog
2.navicat
#注意:數據庫是沒有外網的,想連接可以使用通道
3.應用程序連接MySQL
#注意:需要加載對應語言程序的API

四 配置文件

4.1 mysql配置文件的作用

1.影響服務端的啟動(mysqld)
2.影響客戶端的連接

4.2 配置文件介紹

強調:配置文件中的注釋可以有中文,但是配置項中不能出現中文

1. 在執行mysqld命令時,下列配置會生效,即mysql服務啟動時生效
[mysqld]
;skip-grant-tables
port=3306
character_set_server=utf8
default-storage-engine=innodb
innodb_file_per_table=1


#解壓的目錄
basedir=E:\mysql-5.7.19-winx64
#data目錄
datadir=E:\my_data #在mysqld --initialize時,就會將初始數據存入此處指定的目錄,在初始化之后,啟動mysql時,就會去這個目錄里找數據



#2. 針對客戶端命令的全局配置,當mysql客戶端命令執行時,下列配置生效
[client]
port=3306
default-character-set=utf8
user=root
password=123

#3. 只針對mysql這個客戶端的配置,2中的是全局配置,而此處的則是只針對mysql這個命令的局部配置
[mysql]
;port=3306
;default-character-set=utf8
user=jason
password=4573


#!!!如果沒有[mysql],則用戶在執行mysql命令時的配置以[client]為准

4.3 統一字符編碼

xshell ---> linux ---> mysql數據庫

系統編碼

#1.命令行臨時修改 : 
LANG=us_EN.UTF-8
LANG=zh_CN.UTF-8

臨時修改報錯命令為應文 : LANG=us_EN.UTF-8
#2.修改系統字符集
Centos6 永久修改:[root@db03 ~]# vim /etc/sysconfig/i18n
Centos7 永久修改:[root@db03 ~]# vim /etc/locale.conf

修改mysql數據庫默認字符集

  • 方法1:cmake時候指定

    cmake .
    -DDEFAULT_CHARSET=UTF8 \
    -DDEFAULT_COLLATION=UTF8_GENERAL_CI
    
  • 方法2:配置文件指定

    #1.修改配置文件
    [mysqld]
    character-set-server=utf8
    collation-server=utf8_general_ci
    
    [client]
    default-character-set=utf8
    [mysql]
    default-character-set=utf8
    
    #2. 重啟服務
    #3. 查看修改結果:
    \s
    show variables like '%char%';
    

    注解:

    校驗規則: utf8_general_ci
    	1)ci:大小寫不敏感
    	2)cs或bin:大小寫敏感
    
    #一個表里面不可能出現同名不同大小寫的字段
    
    #查看校驗規則
    mysql> show collation;
    

    注意:最好在[mysqld]下也加上下述配置,規范一些

    # 反向解析
    skip-name-resolve
    
    # 安裝目錄和數據目錄
    basedir= 安裝目錄
    datadir= 數據目錄
    

    mysql數據庫怎么存入emoji表情

    # 第一步:設置數據庫字符編碼為utf8mb4_general_ci  設置相應表字段字符編碼為utf8mb4_general_ci
    
    # 第二步:設置my.cnf增加以下配置信息
    [client]
    default-character-set = utf8mb4
    
    [mysql]
    default-character-set = utf8mb4
     
    [mysqld]
    character-set-client-handshake = FALSE
    character-set-server = utf8mb4
    collation-server = utf8mb4_unicode_ci
    init_connect='SET NAMES utf8mb4'
    
    # 第三步:重啟MySQL 保存表情數據查看數據庫就可以看到數據庫中有表情字符的存在。
    

如果沒有配置默認編碼,也可以在建庫指定,

#1、創建數據庫指定字符集和校驗規則
create database if not exists db1 charset utf8 collate utf8_general_ci;

#2、修改
alter database db1 charset utf8mb4 collate utf8mb4_general_ci;

創建的新表默認繼承其所在庫的字符編碼,除非你自己指定

# 建表時指定編碼
CREATE TABLE `test` (
`id` int(4) NOT NULL AUTO_INCREMENT comment 'id',
`name` char(20) NOT NULL comment '名字',
PRIMARY KEY (`id`) comment '主鍵'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


# 改表的字符集:
alter table test charset utf8;

批量修改庫和表的字符編碼

#1、批量修改字符集,30個庫,300個表
1.我們先創建10個庫
for n in `seq 10`;do mysql -uroot -p123 -e "create database db$n charset gbk;";done

#2、庫里創建表
for n in `seq 10`;do mysql -uroot -p123 -e "use db$n;create table user$n(id int,name varchar(10)) charset gbk";done


for n in `seq 10`;do mysql -S /data/3309/mysql.sock -uroot -p3309 -e "use db$n;create table user$n(id int,name varchar(10)) charset gbk";done

#3、怎么批量修改數據庫的字符集????
對於新創建的表會繼承庫的字符編碼,但對於已經存在的老表,修改其所在庫的字符編碼,表的字符編碼是不會修改的
alter database db1 charset utf8;
show create database db1;
show create table user1;

修改方式
for n in `seq 10`;do mysql -uroot -p123 -e "alter database db$n charset utf8;use db$n;alter table user$n charset utf8";done

4.4 設置不區分大小寫

注意:開發時,數據庫的庫名和表名都要小寫,因為很多研發使用第三方工具連接數據庫,而windows不區分大小寫,linux區分大小寫,很容易讀寫錯數據庫;

mysql> show variables like '%lower%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| lower_case_file_system | OFF   |
| lower_case_table_names | 0     |
+------------------------+-------+
2 rows in set (0.00 sec)

可以修改配置文件來讓數據庫不區分大小寫:

[root@jason ~]# vim /etc/my.cnf
[mysqld]
lower_case_table_names=1
[root@jason ~]# systemctl restart mysql

五 MySQL實例初始化配置(了解)

5.1 初始化配置文件的作用

1.預編譯:cmake去指定,硬編碼到程序當中去

2.在命令行設定啟動初始化配置
--skip-grant-tables 
--skip-networking
--datadir=/application/mysql/data
--basedir=/application/mysql
--defaults-file=/etc/my,cnf
--pid-file=/application/mysql/data/db01.pid
--socket=/application/mysql/data/mysql.sock
--user=mysql
--port=3306
--log-error=/application/mysql/data/db01.err

3.初始化配置文件(/etc/my.cnf)

5.2 配置文件讀取順序

5.2.1 讀取順序

/etc/my.cnf
/etc/mysql/my.cnf
$basedir/my.cnf(前提是在環境變量中定義了MYSQL_HOME變量)
defaults-extra-file (類似include)
~/.my.cnf

5.2.2 生效順序

~/.my.cnf
defaults-extra-file (類似include)
$basedir/my.cnf(前提是在環境變量中定義了MYSQL_HOME變量)
/etc/mysql/my.cnf
/etc/my.cnf

5.2.3 生效順序驗證

#配置/etc/my.cnf
[root@db01 ~]# vim /etc/my.cnf
[mysqld]
server_id=1

#配置/etc/mysql/my.cnf
[root@db01 ~]# mkdir /etc/mysql
[root@db01 ~]# vim /etc/mysql/my.cnf
[mysqld]
server_id=2

#配置$basedir/my.cnf
[root@db01 ~]# vim /service/mysql/my.cnf 
[mysqld]
server_id=3

#配置~/my.cnf
[root@db01 ~]# vim ~/.my.cnf
[mysqld]
server_id=4

#重啟數據庫(注意這里不能使用systemctl restart mysql重啟)
[root@db01 ~]# systemctl stop mysql
[root@db01 ~]# /etc/init.d/mysqld start

#查看server_id
mysql> show variables like 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 4     |
+---------------+-------+
1 row in set (0.00 sec)

5.3 思考參數執行優先級

#cmake:
socket=/service/mysql/tmp/mysql.sock

#命令行:
--socket=/tmp/mysql.sock

#配置文件:
vim /etc/my.cnf
[mysqld]
socket=/opt/mysql.sock

#default參數:
--defaults-file=/tmp/a.txt
vim /tmp/a.txt
[mysqld]
socket=/tmp/test.sock

#啟動測試
mysql_safe --defaults-file=/tmp/a.txt --socket=/tmp/mysql.sock
優先級測試結論:
1、命令行
2、defaults-file
3、配置文件
4、預編譯

命令行 >> defaults-file >> ~/.my.cnf >> defaults-extra-file >> $basedir/my.cnf >> /etc/mysql/my.cnf >> /etc/my.cnf >> cmake

六 mysql相關命令

6.1 mysql連接后命令行快捷命令

\c:中斷當前輸入語句
	\r:重新連接到服務器
	\d:設置語句sql結束符    mysql> \d ]
	\e:編輯命令    輸出輸入的內容 echo
	\p:打印當前命令並執行
\G:垂直顯示結果
\q:退出mysql    等於 quit exit
	\g:表示結束    等於 ; 的作用
\h:顯示此幫助    等於 help    #help還可以查看命令語法 help create database;
	\t:不寫入outfile
\T:將所有內容附加到給定的輸出文件中(只支持本次會話)        \T /tmp/a.log
	#\n:禁用尋呼機,打印到標准輸出。
	#\P:設置尋呼機[到尋呼機]。通過尋呼機打印查詢結果。
\R:更改mysql提示符    \R mysql>>> 
\.:執行一個sql文件    等於 source
\s:從服務器獲取狀態信息    等於 status
\u:切換數據庫    等於 use  #查看當前所在數據庫select database();
	\C:切換到另一個字符集    一般不使用
	\W:在每個語句后顯示警告
	\w:不在每個語句后顯示警告

6.2 help命令

mysql> help
mysql> help contents    help 用法
mysql> help select
mysql> help create
mysql> help create user
mysql> help status
mysql> help show

6.3 mysqladmin命令

1.修改密碼,設置密碼:password
[root@db01 ~]# mysqladmin -uroot -p舊密碼 password '新密碼'

2.關閉MySQL服務:shutdown
[root@db01 ~]# mysqladmin -uroot -p密碼 -S socket文件 shutdown

3.庫外建庫:create
[root@db01 ~]# mysqladmin -uroot -p密碼 create jason
[root@db01 ~]# mysql -uroot -p123456 -e 'create database jason'

4.庫外刪除數據庫:drop
[root@db01 ~]# mysqladmin -uroot -p123456 drop jason
Do you really want to drop the 'jason' database [y/N] y
Database "jason" dropped

5.查看配置文件所有的默認參數:variables
[root@db01 ~]# mysqladmin -uroot -p123456 variables
[root@db01 ~]# mysqladmin -uroot -p123456 variables | grep server_id

6.檢測MySQL進程是否存活:ping
[root@db01 ~]# mysqladmin -uroot -p123456 ping

7.查看數據庫 慢查詢,負載信息:status
[root@db01 ~]# mysqladmin -uroot -p123456 status
Uptime                   MySQL服務器已經運行的秒數
Threads                  活躍線程(客戶)的數量 
Questions                從mysqld啟動起來自客戶問題的數量   已經發送給服務器的查詢的個數
Slow queries             已經超過long_query_time秒的查詢數量 
Opens                    mysqld已經打開了多少表 
Flush tables             flush ..., refresh和reload命令數量 
Open tables              現在被打開的表數量
Queries per second avg: 0.046	負載

8.重載授權表,刷新緩存主機:reload,相當於flush privileges
[root@db01 ~]# mysqladmin -uroot -p123456 reload

9.刷新binlog日志
[root@db01 ~]# mysqladmin -uroot -p123456 flush-log

七 初始sql語句

有了mysql這個數據庫軟件,就可以將程序員從對數據的管理中解脫出來,專注於對程序邏輯的編寫

mysql服務端軟件即mysqld幫我們管理好文件夾以及文件,前提是作為使用者的我們,需要下載mysql的客戶端,或者其他模塊來連接到mysqld,然后使用mysql軟件規定的語法格式去提交自己命令,實現對文件夾或文件的管理。該語法即sql(Structured Query Language 即結構化查詢語言)

SQL語言主要用於存取數據、查詢數據、更新數據和管理關系數據庫系統,SQL語言由IBM開發。
SQL語言分為:
DDL:Data definition Language 數據定義語言(CREATE、DROP、ALTER)
DCL:Data control Language 數據控制語言(GRANT,REVOKE,ROLLBACK,COMMIT)
DML:Data Manipulation Language 數據操作語言(INSERT,UPDATE,DELETE)
DQL:Data Query Language 數據查詢語言(SELECT)

庫、表、記錄的增刪改查

#1. 操作文件夾
增:create database db1 charset utf8;
    數據庫已存在會報錯,使用IF NOT EXISTS
    create database if not exists db1 charset utf8;
查:show databases;
改:alter database db1 charset latin1;
刪除: drop database db1;


#2. 操作文件
先切換到文件夾下:use db1
增:create table t1(id int,name char);
查:show tables
改:alter table t1 modify name char(3);
alter table t1 change name name1 char(2);
刪:drop table t1;
    

#3. 操作文件中的內容/記錄
增:insert into t1 values(1,'jason1'),(2,'jason2'),(3,'jason3');
查:select * from t1;
改:update t1 set name='sb' where id=2;
刪:delete from t1 where id=1;

清空表:
delete from t1; #如果有自增id,新增的數據,仍然是以刪除前的最后一樣作為起始。
truncate table t1;數據量大,刪除速度比上一條快,且直接從零開始,

auto_increment 表示:自增
primary key 表示:約束(不能重復且不能為空);加速查找


免責聲明!

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



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