MySQL經常使用命令/用戶管理/數據庫備份與恢復

來源:https://blog.csdn.net/Powerful_Fymysql

1.MySQL經常使用命令

顯示全部庫:linux

show databases;

切換到mysql庫:sql

use mysql;

顯示mysql庫中的表:數據庫

show tables;

查看tb_user表的字段:centos

desc tb_user;

查看建表語句:服務器

show create table tb_user\G

#\G:有序的顯示(不加\G輸出的內容排版混亂,使用\G後sql語句能夠不加分號)app

查看當前用戶:socket

select user();

查看當前所在數據庫:ide

select database();

查看mysql版本:函數

select version();

建立數據庫:

create database db_1;

建立表:

create table tb_1(`id`int(4),`name`char(40));

建立表的同時指定引擎、字符編碼:

create table tb_1(`id`int(4),`name`char(40)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

查看數據庫狀態:

show status;

查看各參數配置:

show variables;

查看指定參數:

show variables like 'slow%';

臨時修改參數值:

set global max_connect_errors=200;

#mysql重啓後失效,須要永久修改編輯/etc/my.cnf配置文件

查看mysql消息隊列:

show processlist;
show full processlist;

#使用full能夠將查詢結果info字段中正在執行的sql語句顯示完整

2.MySQL建立用戶以及用戶受權

1.建立用戶test,密碼test123:

grant all on *.* to 'test'@'localhost' identified by 'test123';

*.*表示:庫.表,也就是受權全部庫的全部表,只受權db1庫的全部表:db1.*

localhost表示受權只能從本機經過socket文件登陸,經常使用登陸方式:mysql -uroot -p就是經過socket文件mysql.sock登陸,命令寫全爲:

mysql -uroot -pxxx -S/tmp/mysql.sock

若是受權從127.0.0.1登陸,那麼登陸時須要加上-h參數指定host:

mysql -uroot -pxxx -h127.0.0.1

受權因此地址登陸使用百分號%便可:'test'@'%'

2.建立用戶test2,密碼test123:

grant SELECT,UPDATE,INSERT on mysql.* to 'test2'@'192.168.234.128' identified by 'test123';

受權用戶test2只能從192.168.234.128登陸,而且只有mysql庫全部表的查詢、更改、新增權限

mysql受權用戶的登陸IP爲整個網段:'test2'@'192.168.234.%'

3.查詢mysql用戶受權內容:

show grants;

#默認查詢當前用戶的受權信息

查詢指定用戶的受權信息:

MariaDB [(none)]> show grants for test2@'192.168.234.128';
+--------------------------------------------------------------------------------------------------------------------+
| Grants for test2@192.168.234.128                                                                                   |
+--------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'test2'@'192.168.234.128' IDENTIFIED BY PASSWORD '*676243218923905CF94CB52A3C9D3EB30CE8E20D' |
| GRANT SELECT, INSERT, UPDATE ON `mysql`.* TO 'test2'@'192.168.234.128'                                             |
+--------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.000 sec)

通常用於增長受權IP,當前test2用戶受權地址爲192.168.234.128,若是須要給test2用戶添加一個受權地址192.168.234.130,直接複製表格中的兩句內容執行便可:

MariaDB [(none)]>  GRANT USAGE ON *.* TO 'test2'@'192.168.234.130' IDENTIFIED BY PASSWORD '*676243218923905CF94CB52A3C9D3EB30CE8E20D';
Query OK, 0 rows affected (0.000 sec)

MariaDB [(none)]> GRANT SELECT, INSERT, UPDATE ON `mysql`.* TO 'test2'@'192.168.234.130';
Query OK, 0 rows affected (0.000 sec)

注意:mysql執行建立用戶或密碼變動操做後須要執行:flush privileges 刷新系統權限相關的表才能生效,或者重啓mysql服務使其生效

3.經常使用MySQL語句

查詢:select * from table;

統計行數:select(*) from table;

更改數據:update table set tb_xxx=xxx;

刪除數據:delete from table where tb_xxx=xxx;

清空表數據:truncate table_name;(保留表結構)

刪除表:drop table table_name;

刪除庫:drop database db_name;

4.MySQL密碼設置與更改

設置root用戶密碼:

[root@linux ~]# mysqladmin -uroot password "123456"

更改root用戶密碼:

[root@linux ~]# mysqladmin -uroot -p'123456' password '654321'

登陸數據庫更改密碼:

MariaDB [(none)]> use mysql;
MariaDB [mysql]> update user set password=password('123456') where user='root';

#password():mysql加密函數,使密碼在表中不以明文顯示

注意:在當前較高的mysql版本中,root密碼已經不存放在user表的password字段,而是存放在authentication_string字段

高版本mysql更改密碼:

MariaDB [mysql]> update user set authentication=password('123456') where user='root';

在不知道root用戶密碼的狀況下修改密碼的方法,在上一篇文章中有介紹: https://blog.csdn.net/Powerful_Fy/article/details/102689689

5.MySQL數據備份與恢復

備份mysql庫:

[root@linux ~]# mysqldump -uroot -p123456 mysql > /tmp/mysql_bak.sql

恢復備份的mysql庫到mysql2數據庫:

[root@linux ~]# mysql -uroot -p123456 mysql2 < /tmp/mysql_bak.sql

備份mysql庫中的user表:

[root@linux ~]# mysqldump -uroot -p123456 mysql user > /tmp/mysql_tbuser.sql

恢復備份的user表到mysql庫:

[root@linux ~]# mysql -uroot -p123456 mysql < /tmp/mysql_tbuser.sql

備份全部庫:

[root@linux ~]# mysqldump -uroot -p123456  -A > /tmp/mysql_all.sql

只備份mysql庫的表結構:

[root@linux ~]# mysqldump -uroot -p123456 -d mysql > /tmp/mysql_tb.sql

只備份mysql庫user表的表結構:

[root@linux ~]# mysqldump -uroot -p123456 -d mysql user > /tmp/mysql_user.sql

補充:mysqldump方法備份適用於數據量不大的數據庫,數據量幾百G,甚至多少T的數據量備份起來會很是的慢

Percona-xtrabackup工具的兩個經常使用命令:

1.xtrabackup命令:只支持InnoDB和XtraDB存儲引擎的數據庫非阻塞地備份 2.innobackupex命令:經過perl封裝了一層xtrabackup,對MyISAM的備份經過加表讀鎖的方式實現。

安裝Percona-xtrabackup工具

安裝Percona的yum拓展倉庫:

[root@linux ~]# yum -y install https://repo.percona.com/yum/percona-release-latest.noarch.rpm

啓動存儲庫:

[root@linux ~]# percona-release enable-only tools release

安裝2.4版本的xtrabackup:

yum -y install percona-xtrabackup-24

建立備份數據庫的用戶:

mysql> grant reload,lock tables,replication client,process,super on *.* to userbak@'localhost' identified by 'user123';

#建立用戶userbak,密碼user123,受權權限:reload,lock tables,replication client,process,super

刷新權限:

mysql> flush privileges;

建立備份文件存儲目錄:

[root@centos02 ~]# mkdir /data/mysqlbak

全量備份與恢復mysql數據庫

備份:

[root@centos02 ~]# innobackupex --defaults-file=/etc/my.cnf --user=userbak --password=user123 /data/mysqlbak -S /tmp/mysql.sock

#因爲建立受權userbak用戶時定義的host爲localhost,因此須要使用-S參數指定socket文件,若是用戶host受權爲127.0.0.1或實際IP地址,須要使用-h參數指定host

查看備份的文件:

[root@centos02 ~]# ls /data/mysqlbak/2019-10-26_14-42-29/
backup-my.cnf  ibdata1  mysql  performance_schema  test  xtrabackup_checkpoints  xtrabackup_info  xtrabackup_logfile

#存放備份文件的目錄是根據備份時間自動命名

對比mysql目錄與備份目錄大小:

[root@centos02 ~]# du -sh /data/mysql
111M	/data/mysql
[root@centos02 ~]# du -sh /data/mysqlbak/
15M	/data/mysqlbak/

#能夠看出經過strabackup工具有份很是節省磁盤空間

恢復:

中止mysql服務:

[root@centos02 ~]# service mysql stop

刪除datadir目錄中的文件:

[root@centos02 ~]# rm -rf /data/mysql/*

說明: 由於備份的數據中可能會包含還沒有提交的事務或者已經提交但還沒有同步至數據文件中的事務。所以,此時數據文件仍處於不一致狀態。"準備"的主要做用正是經過回滾未提交的事務及同步已經提交的事務至數據文件也使用得數據文件處於一致性狀態。

使相關數據文件保持一致性:

[root@centos02 ~]# innobackupex --apply-log /data/mysqlbak/2019-10-26_14-42-29/

#在實現此步的準備工做過程當中,若是服務器空閒內存夠多,可使用--user-memory參數來指定內存,使其加快速度,默認100M

恢復:

[root@centos02 ~]# innobackupex --defaults-file=/etc/my.cnf --copy-back /data/mysqlbak/2019-10-26_14-42-29/

更改恢復後的文件的屬主和屬組:

[root@centos02 ~]# chown -R mysql:mysql /data/mysql

#接下來啓動mysql服務便可

增量備份與恢復mysql數據庫

注意:增量備份的前提是得有一次全備

第一次增量備份:

[root@centos02 ~]# ls /data/mysqlbak/
2019-10-26_14-42-29

[root@centos02 ~]# innobackupex --user=userbak --password=user123 --incremental /data/mysqlbak/ --incremental-basedir=/data/mysqlbak/2019-10-26_14-42-29  -S /tmp/mysql.sock

說明: 增量備份須要使用- -incremental 指定增量備份存放路徑 使用- -incremental-basedir 指定全量備份的路徑,也就是說基於全量備份作增量

第二次增量備份:

[root@centos02 ~]# ls /data/mysqlbak/
2019-10-26_14-42-29  2019-10-26_16-31-37

[root@centos02 ~]# innobackupex --user=userbak --password=user123 --incremental /data/mysqlbak/ --incremental-basedir=/data/mysqlbak/2019-10-26_16-31-37  -S /tmp/mysql.sock

說明: 這次- -incremental-basedir 須要指定上一次增量備份的目錄,也就是說基於上一次增量作增量備份

增量備份的恢復:

當前備份目錄包含一個全量備份和兩個增量備份:

[root@centos02 ~]# ls /data/mysqlbak/
2019-10-26_14-42-29  2019-10-26_16-31-37  2019-10-26_16-38-00

中止mysql服務:

[root@centos02 ~]# service mysql stop

清空mysql數據存放目錄的文件:

[root@centos02 ~]# rm -rf /data/mysql/*

準備全量:

[root@centos02 ~]# innobackupex --apply-log --redo-only /data/mysqlbak/2019-10-26_14-42-29/

準備第一次增量:

[root@centos02 ~]# innobackupex --apply-log --redo-only /data/mysqlbak/2019-10-26_14-42-29/ --incremental-dir=/data/mysqlbak/2019-10-26_16-31-37

準備第二次增量(最後一次增量不加- -redo-only):

[root@centos02 ~]# innobackupex --apply-log  /data/mysqlbak/2019-10-26_14-42-29/ --incremental-dir=/data/mysqlbak/2019-10-26_16-38-00

再次準備全量(不加 - -redo-only):

[root@centos02 ~]# innobackupex --apply-log /data/mysqlbak/2019-10-26_14-42-29/

注意:準備最後一次增量備份和再次準備全量備份時,不加- -redo-only

恢復:innobackupex --copy-back /全量備份目錄

[root@centos02 ~]# innobackupex --copy-back /data/mysqlbak/2019-10-26_14-42-29/

查看datadir目錄:

[root@centos02 ~]# ls /data/mysql
ibdata1  ib_logfile0  ib_logfile1  ibtmp1  mysql  performance_schema  test  test_mysql  xtrabackup_info  xtrabackup_master_key_id

#數據文件已恢復

更改恢復的數據文件屬主和屬組:

[root@centos02 ~]# chown -R mysql:mysql /data/mysql

#接下來啓動mysql服務便可

補充: 1.若是每一次的增量備份是基於前一次的增量備份來作增量備份,那麼在恢復操做中準備的時候就須要準備第一次全備和每一次的增備 2.若是每一次的增量備份是基於第一次的全備,那麼在恢復的時候只須要準備第一次的全備和最後一次增備

MariaDB10.3.x以上版本的全量/增量備份與恢復

MariaDB10.3.x及以上的版本用Percona XtraBackup工具會有問題,緣由是MariaDB10.3以上版本的redo日誌格式和以前不一樣了。

解決方案:使用mariabackup,它是MariaDB提供的一個開源工具,用於對InnoDB,Aria和MyISAM表進行物理在線備份,這個工具是基於Percona的XtraBackup(版本2.3.8)的解決方案。

全量備份與恢復:

備份:

[root@linux ~]# mariabackup --defaults-file=/etc/my.cnf --backup --user=bakuser --password=bak123 --target-dir /data/mysqlbak/20191026

#與xtrabackup工具不一樣的是Mariabackup備份文件存放目錄須要本身定義,而xtrabackup工具會自動根據時間生成,只需指定/data/mysqlbak目錄便可

恢復:

1.中止服務並清空datadir:

[root@linux ~]# service mysql stop
Redirecting to /bin/systemctl stop mysql.service
[root@linux ~]# rm -rf /data/mysql/*

2.準備:

[root@linux ~]# mariabackup --prepare --target-dir /data/mysqlbak/20191026/

3.開始恢復:

[root@linux ~]# mariabackup --copy-back --target-dir /data/mysqlbak/20191026/

4.更改恢復文件的屬主和屬組:

[root@linux ~]# chown -R mysql:mysql /data/mysql

#成功,接下來便可啓動服務了

增量備份與恢復:

注意:增量備份的前提得須要有一次全備

第一次增備:

[root@linux ~]# mariabackup --backup --user=bakuser --password=bak123 --target-dir /data/mysqlbak/20191026_inc1 --incremental-basedir /data/mysqlbak/20191026/

# - -target-dir 定義增備文件存放路徑,- -incremental-basedir 指定基於增備的全量目錄

第二次增備:

[root@linux ~]# mariabackup --backup --user=bakuser --password=bak123 --target-dir /data/mysqlbak/20191026_inc2 --incremental-basedir /data/mysqlbak/20191026_inc1

# - -target-dir 定義第二次增備文件存放路徑,- -incremental-basedir 指定基於第二次增備的第一次增備目錄

恢復:

中止服務並清空datadir:

[root@linux ~]# service mysql stop
Redirecting to /bin/systemctl stop mysql.service
[root@linux ~]# rm -rf /data/mysql/*

準備全量備份:

[root@linux ~]# mariabackup --prepare --target-dir /data/mysqlbak/20191026 --apply-only

準備第一次增備:

[root@linux ~]# mariabackup --prepare --target-dir /data/mysqlbak/20191026 --incremental-dir /data/mysqlbak/20191026_inc1 --apply-only

準備第二次增備:

[root@linux ~]# mariabackup --prepare --target-dir /data/mysqlbak/20191026 --incremental-dir /data/mysqlbak/20191026_inc2 --apply-only

開始恢復:

[root@linux ~]# mariabackup --copy-back --target-dir /data/mysqlbak/20191026

變動恢復的數據文件的屬主和屬組:

[root@linux ~]# chown -R mysql:mysql /data/mysql

#完成後啓動mysql便可

補充: 與xtrabackup不一樣的事,Mariabackup的每一次增備都基於上一次的增備的狀況下,恢復時準備操做每一次增備均可以直接基於主備目錄,不須要基於上一次的增備目錄

相關文章
相關標籤/搜索