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的每一次增备都基于上一次的增备的状况下,恢复时准备操做每一次增备均可以直接基于主备目录,不须要基于上一次的增备目录

相关文章
相关标签/搜索