云计算百科
云计算领域专业知识百科平台

MySQL权限管理和MySQL备份

五、MySQL权限管理

·设置密码安全级别

# root 根用户 (超级管理员)、用户信息表:mysql.user

# 刷新权限

flush privileges;

# 安装并激活密码规则插件

install plugin validate_password soname 'validate_password.so';

# 查看密码强度

show variables like 'validate_password%';

# 设置密码强度为低,但是密码至少8位

set global validate_password_policy = 0;或者

set global validate_password_policy = low;

·创建新用户

create user 用户名@地址 identified by [password] 密码(字符串) ;

create user tom@localhost identified by 12345678;

create user lisi@% identified by lisi@123;

# mysql中的用户由两部分构成

username 例如:root

host      例如:localhost(本机)、192.168.221.20、192.168.221.%、%

# 修改用户名

rename user old_user to new_user;

eg:rename user tom to tom2;

# 删除用户

drop user 用户名;       eg:drop user tom2;

# 查看用户/查询mysql.user表

select user,host from mysql.user;

·修改密码

# mysql5.X版本修改密码

# 设置管理员密码(mysql8.0之后删除了该语法)

set password = password ( '12345678' );

# 为指定用户设置密码

set password for 用户名 = password ( '密码' );

eg:set password for 'tom'@'%' = password ( '12345678' );

# mysql8.0之后版本修改密码

alter user '用户'@'地址' identified by '密码';

eg:alter user 'tom'@'%' identified by '12345678';

# 刷新权限

flush privileges;

·给用户设置权限

格式:grant 权限列表 on 库名.表名 to 用户@地址;

# 赋予tom所有权限

grant all privileges on *.* to "tom" @"%";

# 赋予tom插入数据、查询数据的权限

grant insert,delete,update,select on *.* to "tom" @"%";

# 查看用户的权限

show grants;

# 查看指定某用户的权限

show grants for 用户名;

·删除权限

# 撤销用户的某个权限

revoke 权限列表 on 库名.表名 from 用户名;

# 撤销用户的所有权限

revoke all privileges,grant option on 库名.表名 from 用户名;

eg:revoke all privileges on *.* from tom@localhost;


·最小权限与角色分工

1、只给需要的权限(最小权限原则)

错误做法:grant all on *.* to 'user'@'%'(给用户所有权限)

正确做法:grant select, insert on app_db.users to 'web_app'@'%'(只允许查询和插入用户表)

比喻:就像员工只能打开自己办公区域的门,不能进财务室。

2、按角色分配权限(角色化管理)

创建角色:create role 'developer', 'readonly'

分配权限:grant select on app_db.* to 'readonly'

关联用户:grant 'developer' to 'team_member'@'%'

比喻:不同职位(如开发、测试、财务)有不同的钥匙串。

—权限列表如下

权限名称

权限说明

all [privileges]

设置除grant option(授予)之外的所有简单权限

alter

允许使用 alter table

alter routine

更改或取消已存储的子程序

create

允许使用 create table

create routine

创建已存储的子程序

create temporary tables

允许使用 create temporary table

create user

允许使用 create user、drop user、rename user 和 revoke all privileges

create view

允许使用 create view

 delete

允许使用 delete,删除表中内容的权限 

drop

允许使用 drop table

execute

允许用户运行已存储的子程序

file

允许使用 select…into outfile 和 load data infile

index

允许使用 create index 和 drop index

 insert

允许使用 insert,在表中添加内容的权限 

lock tables

允许对拥有 select 权限的表使用 lock tables

process

允许使用 show full processlist

references

未被实施

reload

允许使用 flush

replication client

允许用户询问从属服务器或主服务器的地址

replication slave

用于复制型从属服务器(从主服务器中读取二进制日志事件)

select

允许使用 select,查询表内容的权限

show databases

显示所有数据库

show view

允许使用 show create view

shutdown

允许使用 mysqladmin shutdown

super

允许使用 change master、kill、purge master logs 和 set global 语句,mysqladmin debug 命令;允许连接(一次),即使已达到 max_connections

update

允许使用 update,修改表内容的权限

usage

“无权限” 的同义词

grant option

允许授予权限

六、MySQL备份

·为了防止数据丢失、方便数据迁移,建议定期备份数据库中的数据。

·方式:

·逻辑备份:将数据库中库和表转换为SQL语句,生成.sql文件。还原数据时只需要运行该SQL语句。适合中小型规模的数据,30GB以内的数据。数据量过大时,转换效率慢。

·物理备份:将数据库的data目录,直接复制备份。

     ·冷备份:关闭MySQL-Server后进行的备份。

     ·热备份:使用专业的数据备份根据,在服务运行中备份。

     ·全量备份:每次备份都备份所有的数据。

     ·增量备份(差异备份):只备份新增的数据或修改的数据。

使用MySQLdump工具进行备份(逻辑备份)

mysqldump 是MySQL自带的备份命令

用来备份数据库或者进行数据库的迁移,包含创建表、插入表、SQL 语句等。

语法:

mysqldump [options] db_name

常规使用:(以数据库test为例)

# 备份test数据库

mysqldump -uroot -proot123 test > test.sql(不加目录就是当前目录)

# 在其他主机远程备份

mysqldump -uroot -proot123 -h192.168.8.20 test > test.sql

# 还原

mysql -uroot -proot123 test<test.sql

# 恢复所有数据

mysql -uroot -proot123 < all.sql

# 或者登录数据库后,在库中执行还原

use test;

source /root/test.sql


物理备份

冷备份:

# 备份

systemctl stop mysql

mkdir -p /bak/20250811/

cp -r /usr/local/mysql/data /bak/20250811/data

systemctl start mysql

# 还原

systemctl stop mysql

rm -rf /usr/local/mysql/data

cp -r /bak/20250811/data /usr/local/mysql/

chown mysql.mysql -R /usr/local/mysql/data

systemctl start mysql

热备份

·Xtrabackup:percona免费的数据热备工具,用来替代Hotbackup。

·Hotbackup:percona收费版数据热备工具。

一、CentOS7 安装Xtrabackup 8.0和Ubuntu22.04 安装Xtrabackup 8.0

Centos7:

# 安装Percona yum存储库

yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm

# 启用Percona Server 8.0存储库

percona-release enable-only tools release

percona-release setup ps80

# 安装依赖环境

yum -y install  libev perl-DBD-mysql perl-Digest-MD5 epel-release

# 安装

yum -y install percona-xtrabackup-80-8.0.12

# 安装成功后测试版本

xtrabackup –version

#如果成功安装,则会显示Xtrabackup的版本信息。

Ubuntu:

# 添加percona的软件仓库

sudo add-apt-repository 'deb http://repo.percona.com/apt focal main'

# 回车

# 添加percona的公钥

wget https://repo.percona.com/apt/percona-release_latest.$(lsb_release -sc)_all.deb

sudo dpkg -i percona-release_latest.$(lsb_release -sc)_all.deb

# 安装xtrabackup-80

sudo apt update

sudo apt install percona-xtrabackup-80

# 若安装过程中出现如下错误信息

The following packages have unmet dependencies:

percona-xtrabackup-80 : Depends: libssl1.1 (>= 1.1.1) but it is not installable

# 则下载libssl1.1安装一下

wget http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2_amd64.deb

sudo dpkg -i libssl1.1_1.1.1f-1ubuntu2_amd64.deb

# 之后继续安装percona-xtrabackup-80

sudo apt install -y percona-xtrabackup-80

# 若安装过程中出现如下错误信息

The following packages have unmet dependencies:

 percona-xtrabackup-24 : Depends: libdbd-mysql-perl but it is not going to be installed

                         Depends: libcurl4-openssl-dev but it is not going to be installed

                         Depends: libev4 (>= 1:4.04) but it is not going to be installed

 percona-xtrabackup-80 : Depends: libdbd-mysql-perl but it is not going to be installed

                         Depends: libcurl4-openssl-dev but it is not going to be installed

                         Depends: libev4 (>= 1:4.04) but it is not going to be installed

                         Depends: libssl1.1 (>= 1.1.1) but it is not installable

                         Conflicts: percona-xtrabackup-24 but 2.4.28-1.jammy is to be installed

E: Unmet dependencies. Try 'apt –fix-broken install' with no packages (or specify a solution).

# 则根据提示执行相应的命令修复

sudo apt –fix-broken install

# 查看安装版本

sudo xtrabackup –version

二、全量备份

# 在备份服务器上创建一个目录,用于存储备份文件。

mkdir /bak/

# 运行以下命令来执行完整备份:(全量备份,如果远程备份需要添加参数–host=IP,删除–socket参数)

xtrabackup  –defaults-file=/etc/my.cnf  \\

            –user=root  \\

            –password=root123 \\

            –port=3306  \\

            –socket=/tmp/mysql.sock \\

            –datadir=/usr/local/mysql/data \\

            –backup \\

            –target-dir=/bak/full

# 这将备份MySQL数据目录(/usr/local/mysql/data)到指定的目录(/bak/full )中。

三、全量还原

# 首先停止MySQL服务,并确保MySQL数据目录为空。

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

rm -rf /usr/local/mysql/data/*

# 进行恢复:

## a.合并数据文件和日志文件,确保数据完整性。

xtrabackup –prepare \\

           –datadir=/usr/local/mysql/data \\

           –target-dir=/bak/full

## b.全量备份的恢复

xtrabackup  –copy-back \\

            –datadir=/usr/local/mysql/data \\

            –target-dir=/bak/full

## c.修复所有者和权限

chown -R mysql:mysql /usr/local/mysql/data

## d.启动MySQL

systemctl start mysqld或者:/etc/init.d/mysqld start

## e.登录测试

mysql -uroot -proot123

show databases;

四、增量备份

# 增量备份

mkdir /bak/{inc1,inc2}

# 第一次增量备份

xtrabackup  –defaults-file=/etc/my.cnf  \\

            –user=root  \\

            –password=root123 \\

            –port=3306  \\

            –socket=/tmp/mysql.sock \\

            –datadir=/usr/local/mysql/data \\

            –backup \\

            –target-dir=/bak/inc1 \\

            –incremental-basedir=/bak/full

# 第二次增量备份

xtrabackup  –defaults-file=/etc/my.cnf  \\

            –user=root \\

            –password=root123 \\

            –port=3306  \\

            –socket=/tmp/mysql.sock \\

            –datadir=/usr/local/mysql/data \\

            –backup \\

            –target-dir=/bak/inc2 \\

            –incremental-basedir=/bak/inc1

增量还原

# 首先停止MySQL服务,并确保MySQL数据目录为空。

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

rm -rf /usr/local/mysql/data/*

# 进行恢复:(增量备份的恢复,需要恢复增量备份到完全备份)

## a.准备全备(预处理,此选项–apply–log-only 阻止回滚未完成的事务)

xtrabackup –prepare –apply-log-only –target-dir=/bak/full

## b.将第一次增备添加到全备中

xtrabackup –prepare –apply-log-only –target-dir=/bak/full –incremental-dir=/bak/inc1

## c.将第二次增备添加到全备中

xtrabackup –prepare –apply-log-only –target-dir=/bak/full –incremental-dir=/bak/inc2

## d.将合并后的完备再一次准备复制到数据库目录,注意数据库目录必须为空,MySQL服务不能启动

(1)合并数据文件和日志文件,确保数据完整性。

xtrabackup –prepare \\

           –datadir=/usr/local/mysql/data \\

           –target-dir=/bak/full

(2)全备的恢复

xtrabackup  –copy-back \\

            –datadir=/usr/local/mysql/data \\

            –target-dir=/bak/full

# e.修复所有者和权限

chown -R mysql:mysql /usr/local/mysql/data

# f.启动MySQL

systemctl start mysqld或者 /etc/init.d/mysqld start

# g.登录测试

mysql -uroot -proot123

show databases;

赞(0)
未经允许不得转载:网硕互联帮助中心 » MySQL权限管理和MySQL备份
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!