13.4 mysql用戶管理html
13.5 經常使用sql語句mysql
13.6 mysql數據庫備份恢復linux
擴展sql
SQL語句教程 http://www.runoob.com/sql/sql-tutorial.html數據庫
什麼是事務?事務的特性有哪些? http://blog.csdn.net/yenange/article/details/7556094ide
根據binlog恢復指定時間段的數據 https://blog.csdn.net/lilongsy/article/details/74726002測試
相關擴展 https://blog.csdn.net/linuxheik/article/details/71480882 ui
mysql字符集調整 http://xjsunjie.blog.51cto.com/999372/1355013this
使用xtrabackup備份innodb引擎的數據庫 innobackupex 備份 Xtrabackup 增量備份 http://zhangguangzhi.top/2017/08/23/innobackex%E5%B7%A5%E5%85%B7%E5%A4%87%E4%BB%BDmysql%E6%95%B0%E6%8D%AE/#%E4%B8%89%E3%80%81%E5%BC%80%E5%A7%8B%E6%81%A2%E5%A4%8Dmysql.net
相關視頻
連接:http://pan.baidu.com/s/1miFpS9M 密碼:86dx
連接:http://pan.baidu.com/s/1o7GXBBW 密碼:ue2f
13.4 mysql用戶管理:
MySQL建立用戶以及受權:
~1.grant all on *.* to 'user1' @'127.0.0.1' identified by 'passwd';
grant表示受權的意思
all表示全部的權限(查看、建立、刪除等等)
*.*表示對全部的庫都有權限。第一個*表示庫名,例如寫成mysql.*即表示對mysql庫裏的全部的表
to 'user1'建立user1這個用戶
@'127.0.0.1'能夠表示指定客戶端的IP(來源IP)。也就是隻能經過咱們指定的這個IP來登陸。(也能夠寫成%即表示全部來源IP)可是,登陸的時候要-h指定這個IP。。也能夠寫localhost,默認sock登陸,登陸時沒必要-h登陸
identified by表示設置他的密碼後面的'passwd'是設置他的密碼
~2.grant SELECT,UPDATE,INSERT on db1.* to 'user2'@'192.168.133.1' identified by 'passwd'; #針對具體的權限去受權
SELECT,UPDATE,INSERT針對這些權限去受權
on db1針對db1這個庫
.* db1這個庫裏的全部的表
to 'user2'以上條件給user2用戶
@'192.168.133.1'來源IP或是'localhost'
identified by 'passwd'設置他的密碼
~3.grant all on db1.* to 'user3'@'%' identified by 'passwd'; #針對全部的IP去受權
@'%'其中%表示全部IP
~4.show grants; #查看全部受權
~5.show grants for user2@192.168.133.1;
!!root下忘記某一用戶的密碼,可執行這一命令。複製輸出的兩行配置修改便可
實例:
~1.
MySQL [(none)]> grant all on *.* to 'user1'@'127.0.0.1' identified by '123456a';
Query OK, 0 rows affected (0.00 sec)
[root@axinlinux-01 ~]# mysql -uuser1 -p123456a 報錯,由於默認鏈接是sock。要加-h登陸
ERROR 1045 (28000): Access denied for user 'user1'@'localhost' (using password: YES)
[root@axinlinux-01 ~]# mysql -uuser1 -p123456a -h127.0.0.1 由於設置了'127.0.0.1'這個IP須要-h127.0.0.1登陸才能夠
Welcome to the MariaDB monitor. Commands end with ; or \g.
MySQL [(none)]> grant all on *.* to 'user1'@'localhost' identified by '123456a'; 指定IP爲localhost,也就是默認sock登陸,登陸時沒必要-h
Query OK, 0 rows affected (0.00 sec)
MySQL [(none)]> quit 退出測試一下
Bye
[root@axinlinux-01 ~]# mysql -uuser1 -p123456a 測試成功,沒必要-h登陸
Welcome to the MariaDB monitor. Commands end with ; or \g.
~4.
!!假如咱們在root用戶下更改user2的登陸指定IP。可是忘記了user2的密碼,一下:
MySQL [(none)]> show grants for user2@192.168.133.1; 查看user2的權限
+------------------------------------------------------------------------------------------------------------------+
| Grants for user2@192.168.133.1 |
+------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'user2'@'192.168.133.1' IDENTIFIED BY PASSWORD '*59C70DA2F3E3A5BDF46B68F5C8B8F25762BCCEF0' |
| GRANT SELECT, INSERT, UPDATE ON `db1`.* TO 'user2'@'192.168.133.1' |
這兩行是user2的權限。假如咱們忘了user2的密碼,想要修改他的IP。直接能夠在root用戶下分別複製這兩行到命令行,直接修改他的IP便可。以下:
MySQL [(none)]> GRANT USAGE ON *.* TO 'user2'@'127.0.0.1' IDENTIFIED BY PASSWORD '*59C70DA2F3E3A5BDF46B68F5C8B8F25762BCCEF0'; #分別複製這兩行修改他的IP爲127.0.0.1
Query OK, 0 rows affected (0.00 sec)
MySQL [(none)]> GRANT SELECT, INSERT, UPDATE ON `db1`.* TO 'user2'@'127.0.0.1';
Query OK, 0 rows affected (0.00 sec) #第二行也要複製,並修改他的IP爲127.0.0.1
[root@axinlinux-01 ~]# mysql -uuser2 -ppasswd -h127.0.0.1 #測試一下,成功
Welcome to the MariaDB monitor. Commands end with ; or \g.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
13.5 經常使用sql語句:
select查看
insert插入
update更改
關於數據庫的引擎目前兩種:
myisam(mysql庫裏默認的都是myisam。自動的統計有多少行。這種引擎select * 會很快)
innodb(用的時候纔會去統計行數。對於innodb的話用select * 去查看行數,會比較費時以及浪費資源。特別是比較大的表,萬不得已不要去執行)
綜上因此,select * 這種操做盡可能減小這種執行
~1.select count(*) from mysql.user; 查看這個表的行數
mysql.user表示mysql庫的user表。表與庫以 . 做爲分隔符
------
~2.select * from mysql.db; 查看這個表裏全部的內容
select * from mysql.db\G 比較好看
~3.select db from mysql.db; 這個db是字段。就是查看這個表裏db字段的
select db from mysql.db\G
~4.select db,user from mysql.db; 查看兩個字段的。以,分割。查看這個表裏這兩個字段的
select db,user from mysql.db\G
~5.select * from mysql.db where host like '192.168.%'; 模糊搜索查看(使用like)。查看這個表裏全部內容,host爲192.168.開頭的
select * from mysql.db where host like '192.168.%'\G
------
~6.insert into db1.t1 values (1, 'abc'); 字符串要加上單引號。數字能夠不加
括號裏的1與abc分別表明。輸出結果的id與name
~7.update db1.t1 set name='aaa' where id=1; 更新這個表裏的數據name爲aaa,id爲1
delete from db1.t1 where id=2; 刪除這個表裏條件爲id=2的
------
~8.truncate table db1.t1; 清空這個表
僅僅清空這個表裏的內容。表結構還留着
~9.drop table db1.t1; drop會把這個表裏的數據以及結構一塊兒刪除
~10drop database db1; 把這個庫裏的全部刪掉
!!truncate與drop這種刪除語法儘可能少用,避免刪錯
實例:
~1.
MySQL [db1]> select count(*) from mysql.user;
+----------+
| count(*) |
+----------+
| 11 | 即11行
+----------+
~6.
MySQL [db1]> select * from db1.t1; 這個表示空的
Empty set (0.03 sec)
MySQL [db1]> insert into db1.t1 values (1, 'abc'); 括號裏分別對應下面輸出的id和name
Query OK, 1 row affected (0.04 sec)
MySQL [db1]> select * from db1.t1; 查看就有了
+------+------+
| id | name |
+------+------+
| 1 | abc |
+------+------+
1 row in set (0.01 sec)
MySQL [db1]> insert into db1.t1 values (1, 234); 再插入數字,不加單引號)
Query OK, 1 row affected (0.01 sec)
MySQL [db1]> select * from db1.t1; 查看輸出正確
+------+------+
| id | name |
+------+------+
| 1 | abc |
| 1 | 234 |
+------+------+
2 rows in set (0.00 sec)
~7.
MySQL [db1]> update db1.t1 set name='aaa' where id=1;
Query OK, 2 rows affected (0.02 sec)
Rows matched: 2 Changed: 2 Warnings: 0
MySQL [db1]> select * from db1.t1; 全部的id都是1,全部的name都是aaa
+------+------+
| id | name |
+------+------+
| 1 | aaa |
| 1 | aaa |
+------+------+
2 rows in set (0.00 sec)
MySQL [db1]> delete from db1.t1 where id=1; 刪除這個表裏條件爲id=1的
Query OK, 2 rows affected (0.01 sec)
MySQL [db1]> select * from db1.t1; id都爲1。因此刪完了
Empty set (0.00 sec)
~8.
MySQL [db1]> truncate table db1.t1; 清空這個表
Query OK, 0 rows affected (0.06 sec)
MySQL [db1]> select * from db1.t1; 查看已經沒有內容了
Empty set (0.00 sec)
MySQL [db1]> desc db1.t1; desc看一下。表的結構還在
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id | int(4) | YES | | NULL | |
| name | char(40) | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
2 rows in set (0.00 sec)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
13.6 mysql數據庫備份恢復:
mysqldump是備份的一個命令。能夠備份一個庫,也能夠備份一個表
恢復的時候用mysql命令
~1.
備份庫 mysqldump -uroot -p123456 mysql > /tmp/mysql.sql
備份root用戶的mysql庫,重定向到/tmp/mysql.sql
mysql -uroot -pwangxin789 -e "create database mysql2"
mysql -uroot -pwangxin789 mysql2
恢復庫 mysql -uroot -p123456 mysql < /tmp/mysql.sql
~2.
備份表 mysqldump -uroot -p123456 mysql user > /tmp/user.sql
在庫的後面加上表,以空格分割
恢復表 mysql -uroot -p123456 mysql < /tmp/user.sql
恢復標的時候只寫庫的名字便可,不用寫表的名字
~3.
備份全部庫 mysqldump -uroot -p -A >/tmp/123.sql
使用-A(大A)即備份全部的數據庫
~4.
只備份表結構 mysqldump -uroot -p123456 -d mysql > /tmp/mysql.sql
使用-d(小d)及備份庫裏面表的結構,不備份數據
若是數據量太大,幾個T的話。再用mysqldump就會特別的慢
~1.
[root@axinlinux-01 ~]# mysqldump -uroot -pwangxin789 mysql > /tmp/mysql.sql
直接在linux中mysqldump 這個mysql庫,重定向到tmp/mysql.sql
[root@axinlinux-01 ~]# ls /tmp/mysql.sql
/tmp/mysql.sql 這個mqsql.sql就是咱們備份的文件
[root@axinlinux-01 ~]# mysql -uroot -pwangxin789 -e "create database mysql2"
咱們能夠在linux下直接-e(建立)一個mysql2的庫
[root@axinlinux-01 ~]# mysql -uroot -pwangxin789 mysql2 < /tmp/mysql.sql
把咱們剛備份的mysql庫恢復到mysql2這個庫裏。使用反重定向
[root@axinlinux-01 ~]# mysql -uroot -pwangxin789 mysql2
在進入mysql的時候,在後面加上庫的名字就能直接進入到mysql2庫裏去
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MariaDB monitor. Commands end with ; or \g.
MySQL [mysql2]> select database(); 查看mysql2這個庫
+------------+
| database() |
+------------+
| mysql2 |
+------------+
1 row in set (0.00 sec)
MySQL [mysql2]> show tables; 查看mysql2裏有沒咱們剛剛恢復的這個庫
+---------------------------+
| Tables_in_mysql2 |
+---------------------------+
| columns_priv |
~2.
[root@axinlinux-01 ~]# mysqldump -uroot -pwangxin789 mysql user > /tmp/user.sql
[root@axinlinux-01 ~]# mysql -uroot -pwangxin789 mysql2 < /tmp/user.sql