最高权限管理者是root用户,它拥有着最高的权限操作。包括select、update、delete、update、grant等操作。那么一般情况在公司之后DBA工程师会创建一个用户和密码,去连接数据库的操作,并给当前的用户设置某个操作的权限(或者所有权限)。那么这时就需要来简单了解一下:

  • 如何创建用户和密码

  • 给当前的用户授权

  • 移除当前用户的权限

  如果想创建一个新的用户,则需要以下操作:

  

1.进入到mysql数据库下

  1. mysql> use mysql
  2. Database changed

2.对新用户增删改

  1. 1.创建用户:
  2. # 指定ip:192.118.1.1的hao用户登录
  3. create user \'hao\'@\'192.118.1.1\' identified by \'123\';
  4. # 指定ip:192.118.1.开头的hao用户登录
  5. create user \'hao\'@\'192.118.1.%\' identified by \'123\';
  6. # 指定任何ip的hao用户登录
  7. create user \'hao\'@\'%\' identified by \'123\';
  8. 2.删除用户
  9. drop user \'用户名\'@\'IP地址\';
  10. 3.修改用户
  11. rename user \'用户名\'@\'IP地址\' to \'新用户名\'@\'IP地址\';
  12. 4.修改密码
  13. set password for \'用户名\'@\'IP地址\'=Password(\'新密码\');

3.对当前的用户授权管理

  1. #查看权限
  2. show grants for \'用户\'@\'IP地址\'
  3.  
  4. #授权 hao用户仅对db1.t1文件有查询、插入和更新的操作
  5. grant select ,insert,update on db1.t1 to "hao"@\'%\';
  6. # 表示有所有的权限,除了grant这个命令,这个命令是root才有的。hao用户对db1下的t1文件有任意操作
  7. grant all privileges on db1.t1 to "hao"@\'%\';
  8. #hao用户对db1数据库中的文件执行任何操作
  9. grant all privileges on db1.* to "hao"@\'%\';
  10. #hao用户对所有数据库中文件有任何操作
  11. grant all privileges on *.* to "hao"@\'%\';
  12. #取消权限
  13. # 取消hao用户对db1的t1文件的任意操作
  14. revoke all on db1.t1 from \'hao\'@"%";
  15. # 取消来自远程服务器的hao用户对数据库db1的所有表的所有权限
  16. revoke all on db1.* from \'hao\'@"%";
  17. 取消来自远程服务器的hao用户所有数据库的所有的表的权限
  18. revoke all privileges on *.* from \'hao\'@\'%\';

 DBA到底是做什么的,百科上说:数据库管理员(Database Administrator,简称DBA),是从事管理和维护数据库管理系统(DBMS)的相关工作人员的统称,属于运维工程师的一个分支,主要负责业务数据库从设计、测试到部署交付的全生命周期管理。DBA的核心目标是保证数据库管理系统的稳定性、安全性、完整性和高性能。

  百科出来的内容总是那么的专业,让人看完之后的感觉是很解释的很好,我认为,DBA主要做三件事情:1.保证公司的数据不丢失不损坏 2.提高数据库管理系统的工作性能

  对于现在的公司来讲,数据变得尤为重要,可以说最重要,你的网站可以无法访问,服务器可以宕机,但是数据绝对不能丢。

备份表: 备份其中的某个表: 语法:mysqldump -u 用户名 -p 库名 表名> (路径)备份的文件名 mysqldump -uroot -p crm2 student> f:\数据库备份练习\crm2_table_student.sql

单纯进行表备份的时候,就不用写-B参数了,因为库crm2后面就是student表了,也就是说crm2库还在呢

备份多个表: 语法:mysqldump -u 用户名 -p 库名 表名1 表名2> (路径)备份的文件名

和多个库一起备份有一个同样的问题,就是如果只需要恢复某一张表怎么办,上面的多表备份是不是也不太合适,所以又要进行分表备份 又是同样的套路,获取所有的表名,写一个循环脚本,执行单表备份的指令。 分库分表备份有些缺点:文件多,很碎,数据量非常大的时候,效率低 1.做一个完整的全备,再做一个分库分表的备份 2.脚本批量恢复多个sql文件。 备份数据库表结构: 利用mysqldump -d参数只备份表的结果,例如:备份crm2库的所有表的结构:

C:\WINDOWS\system32>mysqldump -uroot -p -B -d crm2> f:\数据库备份练习\crm2stru.sql Enter password: ***

备份出来的文件打开一看,就没有了插入数据的部分

mysqldump的关键参数说明:       1.-B指定多个库,增加建库语句和use 语句       2.–compact 去掉注释,适合调试输出,生产上不用       3.-A或者–all-databases 例如:C:\WINDOWS\system32>mysqldump -uroot -p -B -A> f:\数据库备份练习\all.sql Enter password: ***

      4.-F刷新binlog日志       5.–master-data 增加binlog日志文件名及对应的为支点。       6.-x,–lock-all-tables 将所有的表锁住,一般mysql引擎都是锁表,全部都不能使用了,所有不太友好

      7.–add-locks这个选项会在INSERT语句中捆上一个LOCK TABLE和UNLOCK TABLE语句。这就防止在这些记录被再次导入数据库时其他用户对表进行的操作(mysql默认是加上的)       8.-l,–lock-tables Lock all tables for read       9.-d 只备份表结构       10.-t 只备份数据

  1. –single-transaction 开启事务,适合innodb事务数据库备份,InnoDB表在备份时,通常启用选项–single-transaction来保证备份的一致性,实际上工作原理时设定本次会话的隔离界别为:REPEATABLE READ,以确保本次会话(dump)时,不会看到其他会话已经提交了数据。

        MyISAM全库备份指令推荐:(gzip是压缩文件为zip类型的)         mysqldump -uroot -p666 -A -B –master-data=2 -x|gzip>f:\数据库备份练习\all.sql.gz         InnoDB全库备份指令推荐:         mysqldump -uroot -p666 -A -B –master-data=2 –single-transaction|gzip>f:\数据库备份练习\all.sql.gz

    数据恢复:

  一、通过source命令恢复数据库     进入mysql数据库控制台,mysql -uroot -p666登陆后     mysql>use 数据库;     然后使用source命令,后面参数为脚本文件(如这里用到的是.sql文件,如果你备份的是.txt文件,那这里写.txt文件)

    mysql>source crm2.sql #这个文件是系统路径下的,默认是登陆mysql前的系统路径,在mysql中查看系统路径的方法是通过system+系统命令来搞的     mysql>system ls   二、利用mysql命名恢复(标准)     mysql -root -p666 -e “use crm2;drop table student;show tables;” 必须是双引号     mysql -uroot -p666 crm2<f:\数据库备份练习\crm2.sql     mysql -uroot -p666 -e “use crm2;show tables;”

    注:如果sql文件里面没有use db这样的字样时,在导入时就要指定数据库名了。

    mysql -uroot -p666 crm2<.sql文件

    建议备份数据库时都指定上-B参数,效果好

    说明:mysql不光可以恢复mysqldump的备份,只要文件中是sql语句,都可以通过mysql命令执行到数据库中

    mysql 带-e参数实现非交互式对话,就是不需要到mysql里面去,在外面执行里面的指令的方法,例如:mysql -uroot -p666 -e “use crm2;show tables;”,但是语句必须是双引号包裹。

    批量恢复库:找到所有的数据库名,然后通过库名去循环恢复

  1. #1. 物理备份: 直接复制数据库文件,适用于大型数据库环境。但不能恢复到异构系统中如Windows。
  2. #2. 逻辑备份: 备份的是建表、建库、插入等操作所执行SQL语句,适用于中小型数据库,效率相对较低。
  3. #3. 导出表: 将表导入到文本文件中。

一、使用mysqldump实现逻辑备份

  1. #语法:
  2. # mysqldump -h 服务器 -u用户名 -p密码 数据库名 > 备份文件.sql
  3.  
  4. #示例:
  5. #单库备份
  6. mysqldump -uroot -p123 db1 > db1.sql
  7. mysqldump -uroot -p123 db1 table1 table2 > db1-table1-table2.sql
  8. #多库备份
  9. mysqldump -uroot -p123 --databases db1 db2 mysql db3 > db1_db2_mysql_db3.sql
  10. #备份所有库
  11. mysqldump -uroot -p123 --all-databases > all.sql

二、恢复逻辑备份

  1. #方法一:
  2. [root@localhost backup]# mysql -uroot -p123 < /backup/all.sql
  3.  
  4. #方法二:
  5. mysql> use db1;
  6. mysql> SET SQL_LOG_BIN=0;
  7. mysql> source /root/db1.sql
  8. #注:如果备份/恢复单个库时,可以修改sql文件
  9. DROP database if exists school;
  10. create database school;
  11. use school;

三、备份/恢复案例

  1. #数据库备份/恢复实验一:数据库损坏
  2. 备份:
  3. 1. # mysqldump -uroot -p123 --all-databases > /backup/`date +%F`_all.sql
  4. 2. # mysql -uroot -p123 -e \'flush logs\' //截断并产生新的binlog
  5. 3. 插入数据 //模拟服务器正常运行
  6. 4. mysql> set sql_log_bin=0; //模拟服务器损坏
  7. mysql> drop database db;
  8. 恢复:
  9. 1. # mysqlbinlog 最后一个binlog > /backup/last_bin.log
  10. 2. mysql> set sql_log_bin=0;
  11. mysql> source /backup/2014-02-13_all.sql //恢复最近一次完全备份
  12. mysql> source /backup/last_bin.log //恢复最后个binlog文件
  13. #数据库备份/恢复实验二:如果有误删除
  14. 备份:
  15. 1. mysqldump -uroot -p123 --all-databases > /backup/`date +%F`_all.sql
  16. 2. mysql -uroot -p123 -e \'flush logs\' //截断并产生新的binlog
  17. 3. 插入数据 //模拟服务器正常运行
  18. 4. drop table db1.t1 //模拟误删除
  19. 5. 插入数据 //模拟服务器正常运行
  20. 恢复:
  21. 1. # mysqlbinlog 最后一个binlog --stop-position=260 > /tmp/1.sql
  22. # mysqlbinlog 最后一个binlog --start-position=900 > /tmp/2.sql
  23. 2. mysql> set sql_log_bin=0;
  24. mysql> source /backup/2014-02-13_all.sql //恢复最近一次完全备份
  25. mysql> source /tmp/1.log //恢复最后个binlog文件
  26. mysql> source /tmp/2.log //恢复最后个binlog文件
  27. 注意事项:
  28. 1. 完全恢复到一个干净的环境(例如新的数据库或删除原有的数据库)
  29. 2. 恢复期间所有SQL语句不应该记录到binlog

四、实现自动化备份

  1. 备份计划:
  2. 1. 什么时间 2:00
  3. 2. 对哪些数据库备份
  4. 3. 备份文件放的位置
  5. 备份脚本:
  6. [root@localhost~]# vim /mysql_back.sql
  7. #!/bin/bash
  8. back_dir=/backup
  9. back_file=`date +%F`_all.sql
  10. user=root
  11. pass=123
  12.  
  13. if [ ! -d /backup ];then
  14. mkdir -p /backup
  15. fi
  16. # 备份并截断日志
  17. mysqldump -u${user} -p${pass} --events --all-databases > ${back_dir}/${back_file}
  18. mysql -u${user} -p${pass} -e \'flush logs\'
  19.  
  20. # 只保留最近一周的备份
  21. cd $back_dir
  22. find . -mtime +7 -exec rm -rf {} \;
  23. 手动测试:
  24. [root@localhost ~]# chmod a+x /mysql_back.sql
  25. [root@localhost ~]# chattr +i /mysql_back.sql
  26. [root@localhost ~]# /mysql_back.sql
  27. 配置cron
  28. [root@localhost ~]# crontab -l
  29. 2 * * * /mysql_back.sql

五、表的导出和导入

  1. SELECT... INTO OUTFILE 导出文本文件
  2. 示例:
  3. mysql> SELECT * FROM school.student1
  4. INTO OUTFILE \'student1.txt\'
  5. FIELDS TERMINATED BY \',\' //定义字段分隔符
  6. OPTIONALLY ENCLOSED BY \'\' //定义字符串使用什么符号括起来
  7. LINES TERMINATED BY \'\n\' ; //定义换行符
  8. mysql 命令导出文本文件
  9. 示例:
  10. # mysql -u root -p123 -e \'select * from student1.school\' > /tmp/student1.txt
  11. # mysql -u root -p123 --xml -e \'select * from student1.school\' > /tmp/student1.xml
  12. # mysql -u root -p123 --html -e \'select * from student1.school\' > /tmp/student1.html
  13. LOAD DATA INFILE 导入文本文件
  14. mysql> DELETE FROM student1;
  15. mysql> LOAD DATA INFILE \'/tmp/student1.txt\'
  16. INTO TABLE school.student1
  17. FIELDS TERMINATED BY \',\'
  18. OPTIONALLY ENCLOSED BY \'\'
  19. LINES TERMINATED BY \'\n\';
  1. #可能会报错
  2. mysql> select * from db1.emp into outfile \'C:\\db1.emp.txt\' fields terminated by \',\' lines terminated by \'\r\n\';
  3. ERROR 1238 (HY000): Variable \'secure_file_priv\' is a read only variable
  4. #数据库最关键的是数据,一旦数据库权限泄露,那么通过上述语句就可以轻松将数据导出到文件中然后下载拿走,因而mysql对此作了限制,只能将文件导出到指定目录
  5. 在配置文件中
  6. [mysqld]
  7. secure_file_priv=\'C:\\\' #只能将数据导出到C:\\下
  8. 重启mysql
  9. 重新执行上述语句

六、数据库迁移

  1. 务必保证在相同版本之间迁移
  2. # mysqldump -h 源IP -uroot -p123 --databases db1 | mysql -h 目标IP -uroot -p456

 

版权声明:本文为sundawei7原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/sundawei7/p/11479401.html