MySQL数据库的用户权限使用和数据的备份和恢复

数据库的操作,表的操作,很重要,但是我感觉对于数据库的安全才是最重要的,来看看该怎么管理好自己的数据库吧,该注意的地方已经做了注释,希望大家可以好好学习。


在本机设置数据库管理员初始密码

[root@xu mysql]# mysqladmin -hlocalhost -uroot password "123"


修改密码 (要知道之前的密码)

[root@xu mysql]# mysqladmin -hlocalhost -uroot -p password "456"

Enter password:


跳过SQL的验证库进入

vim /etc/my.cnf

1 [mysqld]

2 skip-grant-table


修改数据库管理员的密码

mysql> use mysql;

mysql> select User,Host,password from user; 查看user表

mysql> update mysql.user set Passwrod=passwd("admin888") where User="root" and Host="localhost"; 修改密码

mysql> flush privileges; 刷新授权 只要手动任何一个表作了一个更改就要刷新授权表


注视掉(加#)

1 [mysqld]

2 skip-grant-table


重启服务


默认情况下只允数据库在本机登录的时候有给数据库授权的权限


查看自己的登录权限

mysql> show grants;


查看当前有多少个授权用户 权限多少

数据库名

mysql> show grants for extmail@localhost; ---------- 不对。


----------------------------------------

用户授权 (就在本机直接登录其它的电脑的mysql 用管理员身份)


授权格式

grant 权限列表 on 数据库名 to 用户名@ "客户端地址" >[ identified by "密码" with grant option];


权限列表

类表值用,分割

all 所有的

select ,delect,update(name,age) 可选择的


数据库

*.* 所有的

数据库名.* 这个数据的所有

数据库名.表名



用户名

与系统用户无关 。 是自己在授权是自定义的 mysql.user表里 要有标识性


客户端地址

% 所有主机

1.1.1.1 单个主机

192.168.1.% 某个网段

pc1.uplooking.com

.uplooking.com


---------------------------------------

给所有用户手受所有权限


允许使用数据库服务的root用户从网络中所有主机访问数据库服务器 密码123456 对服务器 上的所有库有完全权限 且有授权的权限


授权之前

mysql> select User,Host,password from user;

授权的表

mysql> grant all on *.* to root@"%" identified by "123456" with grant option;


查看授权的权限

mysql> show grants for root@"%";


----------------------------------------------

设置 只能用webuser 用户登录 网段是192.168.1.%

mysql> grant all on grantdb.* to webuser@"192.168.1.%";


----------------------------------------------

mysql> desc db;

+-----------------------+---------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-----------------------+---------------+------+-----+---------+-------+

| Host | char(60) | NO | PRI | | |

| Db | char(64) | NO | PRI | | | 库的授权信息

| User | char(16) | NO | PRI | | | 用户的授权信息

| Select_priv | enum('N','Y') | NO | | N | |

| Insert_priv | enum('N','Y') | NO | | N | |

| Update_priv | enum('N','Y') | NO | | N | |

| Delete_priv | enum('N','Y') | NO | | N | |

| Create_priv | enum('N','Y') | NO | | N | |

| Drop_priv | enum('N','Y') | NO | | N | |

| Grant_priv | enum('N','Y') | NO | | N | |

| References_priv | enum('N','Y') | NO | | N | |

| Index_priv | enum('N','Y') | NO | | N | |

| Alter_priv | enum('N','Y') | NO | | N | |

| Create_tmp_table_priv | enum('N','Y') | NO | | N | |

| Lock_tables_priv | enum('N','Y') | NO | | N | |

| Create_view_priv | enum('N','Y') | NO | | N | |

| Show_view_priv | enum('N','Y') | NO | | N | |

| Create_routine_priv | enum('N','Y') | NO | | N | |

| Alter_routine_priv | enum('N','Y') | NO | | N | |

| Execute_priv | enum('N','Y') | NO | | N | |

| Event_priv | enum('N','Y') | NO | | N | |

| Trigger_priv | enum('N','Y') | NO | | N | |

+-----------------------+---------------+------+-----+---------+-------+

22 rows in set (0.01 sec)


-------------------------------------------

库的授权

mysql> use mysql;

mysql> desc db;

mysql> select Host,User,Db from db;


----------------------------------

%不包括localhost

mysql> create database webdb;

mysql>grant select on webdb.* to user@"%" identified by "123" with grant option;

quit


mysql -hlocalhost -uuser1 -p123 登录不上原因 % 不包括localhost


-------------------------------------------------

匿名用户不输入密码也可以登录


登录

[root@xu ~]# mysql -ua


mysql> select User,Host,password from user;

+------+---------------+-------------------------------------------+

| User | Host | password |

+------+---------------+-------------------------------------------+

| root | localhost | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |

| root | xu.qq.com | |

| root | 127.0.0.1 | |

| | localhost | | 这样的不安全 ,随便输入个用户就可以进入不需要密码,匿名用户

| | xu.qq.com | |

| root | % | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |

| zp1 | 192.168.1.111 | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |

| user | % | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |

+------+---------------+-------------------------------------------+


删除 空白的用户

mysql> delete from mysql.user where User="";


刷新

mysql> flush privileges;


在重新登录 就不能登录了 更加安全

[root@xu ~]# mysql -ua

ERROR 1045 (28000): Access denied for user 'a'@'localhost' (using password: NO)


--------------------------------------------------

用户权限的撤销 (前提要有这样的授权才行要不他提示没有这种权限)


revoke 权限列表 on 数据库名 from 用户名@ “客户端地址“;


查看有什么权限

mysql> show grants for root@"%";


| GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' WITH GRANT OPTION |


------------------------------------

撤销用户登录权限 (但是授权的权限还在)用户也在

mysql> revoke all on *.* from root@"%";


再次查看

mysql> show grants for root@"%";

| GRANT USAGE ON *.* TO 'root'@'%' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' WITH GRANT OPTION |


-----------------------------------------------

去掉授权的权限 权限没有了 但是用户还在

mysql> revoke grant option on *.* from root@"%";


查看

| GRANT USAGE ON *.* TO 'root'@'%' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' |


-------------------------------------

在删除 这个root用户


这样就真正的把权限和用户删出了。


---------------------------------------------------------

数据库的备份和恢复


物理备份 cp 或者 tar 缺点是跨平台不太好

逻辑备份 提供的备份命令 进行备份 跨平台性


逻辑备份

[root@xu dbadb]# mysqldump -hip -u用户名 -p密码 数据库名 > 目录名/文件


备份表


数据库名

数据库名 所有的进行备份

数据库名 表名1 表名2 表名3 备份多个表


备份库

-B 数据库名1 数据名2 备份多个选择的数据库

[root@xu /]# mysqldump -uroot -p123 --all-databases >/dbadb/aa 备份所有库


-----------------------------------------------------


顺序执行

[root@xu dbadb]# mkdir /dbadb; mysqldump -hlocalhost -uroot -p123 webdb > /dbadb/aa.sql


----------------------------------------

恢复

[root@xu /]# mysql -hip -u 用户名 -p密码 数据名 < 文件名.sql


-----------------------------------------

增量备份


mysql 日志 ( 错误 , 查询 , binlog日志 , 慢查询日志)

binlog日志 能够记录除查询之外的sql语句


默认binlog 日志 在 /var/lib/mysql/ 下

mysql-bin.0000001 记录mysql语句 (查询的不记录)500兆以后就会新创建一个

mysqld-bin.index 存放binlog文件的分数 只有重启服务的时候才会生成,手动创建index内容不会添加进去

查看binlog文件 时间和节点 来记录的

mysqlbinlog mysql-bin.0000001


------------------------

[root@xu mysql]# vim /etc/my.cnf


1 [mysqld]

2 log-bin


[root@xu mysql]# service mysqld restart


----------------------

指定binlog 名字

[root@xu mysql]# vim /etc/my.cnf


1 [mysqld]

2 log-bin=aa

------------------------

指定路径

[root@xu mysql]# vim /etc/my.cnf


1 [mysqld]

2 log-bin=/aa/wenjian


mkdir /aa

chmodo+w /aa


重启服务


-------------------------

手动创建binlog日志

1 service mysqld restart 最少用的

2 mysql > flush logs;

3 mysql -uroot -p123 -e "flush logs"

4 mysqldump -uroot -p123 --flush-logs db1 > /db.sql


-------------------------------


查看binlog文件

mysqlbinlog mysql-bin.0000001


--------------------

恢复 以节点恢复

[root@xu mysql]# mysqlbinlog aa.0000001 --start-postion=98 --stop-positon=189 在桌面显示

[root@xu mysql]# mysqlbinlog aa.0000001 --start-postion=98 --stop-positon=189 |mysql -uroot -p123


增量备份

------------------------------------------

差异备份


星期1 星期2 星期3 星期4 星期5 星期6 星期日

完全备份数据库 bin bin bin bin bin 完全备份数据库


--------------------------------------------------

以时间恢复

[root@xu mysql]# mysqlbinlog aa.0000001 --start-datetime="2013-03-02 13:53:21" --start-time="2013-03-02 13:53:29"

[root@xu mysql]# mysqlbinlog aa.0000001 --start-datetime="2013-03-02 13:53:21" --start-time="2013-03-02 13:53:29" |mysql -uroot -p123


在时间恢复的时候如果俩个命令在同一个时间点上 恢复的时候结束时间要大于开始时间


批量恢复binlog日志的内容

[root@xu mysql]# mysqlbinlog `cat /binlogdir/aa.index` | mysql -uroot -p123


清除index里的文件

prinyf “” > /binlogdir/aa.index


----------------------------------------------

慢查询日志


log-slow-queries[=/path_to/file_name]

long_query_time=3

记录了执行时间超过 log_query_time 参数值的 sql 语句,慢查询日志可以的有效的帮助我们发现实际应用中 sql 性能问题,

找出执行效率低下的 SQL 语句


--------------------------------------------

错误日志

log-error=/var/log/mysqld.log

记录 mysql 数据库启动关闭信息,以及服务器运行过程中所发生的任何严重的错误信息,通常,当数据库出现问题不能正

常启动,我们应当首先想到的就是查看错误日志


--------------------------------

二进制日志

log-bin=[/path_to/file_name]

bin-log=pp

max_binlog_size=1M

binary log 文件是以二进制格式保存的,我们需要借助 mysqlbinlog 工具进行


----------------------------------------

binlog实现 AB 复制(主从复制)


1保持原始数据一至 从的一定要有主的

2 安全机制都关掉

3 线路问题没问题


主的服务器

#1 删掉之前的库 到原始状态

#2 重启服务

3启动binlog日志


进入mysql

创建一个授权帐号

grant replication slave on *.* to plj@"192.168.1.149" indentified by "123";


编辑文件

[root@xu mysql]# vim /etc/my.cnf

1 [mysqld]

2 log-bin

3 server-id=71

---------------------------------------------

从的配置

重启服务

[root@xu mysql]# service mysqld restart


俩个主机的数据一致


编辑文件

[root@xu mysql]# vim /etc/my.cnf

server-id=149

master-host=192.168.1.71

master-user=plj

master-password=123


[root@xu mysql]# service mysqldd restart


---------------------------

[root@xu mysql]# cd /var/lib/mysql/


db ib_logfile0 mysql relay-log.info

extmail ib_logfile1 mysqld-relay-bin.000002 test

ibdata1 master.info mysqld-relay-bin.index


mysqld-relay-bin.000002 中继日志

mysqld-relay-bin.index 中继日志份数

relay-log.info 中继日志主日志数据库的信息

-------------------------

主数据库查看自己的状态

[root@xu mysql]# show master status\G;

+-------------------+----------+--------------+------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+-------------------+----------+--------------+------------------+

| mysqld-bin.000001 | 956 | | |

+-------------------+----------+--------------+------------------+

1 row in set (0.00 sec)


从数据库查看自己的状态

[root@xu mysql]# show slave status\G;

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.1.71

Master_User: plj

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysqld-bin.000001

Read_Master_Log_Pos: 956

Relay_Log_File: mysqld-relay-bin.000002

Relay_Log_Pos: 1094

Relay_Master_Log_File: mysqld-bin.000001

Slave_IO_Running: Yes 重启服务以后 他看的是master.info 信息

Slave_SQL_Running: Yes

Replicate_Do_DB:

Replicate_Ignore_DB:

Replicate_Do_Table:

Replicate_Ignore_Table:

Replicate_Wild_Do_Table:

Replicate_Wild_Ignore_Table:

Last_Errno: 0

Last_Error:

Skip_Counter: 0

Exec_Master_Log_Pos: 956

Relay_Log_Space: 1094

Until_Condition: None

Until_Log_File:

Until_Log_Pos: 0

Master_SSL_Allowed: No

Master_SSL_CA_File:

Master_SSL_CA_Path:

Master_SSL_Cert:

Master_SSL_Cipher:

Master_SSL_Key:

Seconds_Behind_Master: 0

1 row in set (0.00 sec)

你可能感兴趣的:(MySQL数据库的用户权限使用和数据的备份和恢复)