MySQL数据库安全

MySQL数据库安全

数据备份

  需求

    数据丢失的原因:自然灾害,人为破坏,设备故障,程序错误,计算机失败,磁盘失败

    应对方案:

      物理备份:脱机备份(冷备份),联机备份(热备份);冷备份是在关闭数据库时进行的备份,热备份是数据库处于运行状态,依赖                  于数据库的日志文件

      逻辑备份:通过软件,逻辑备份

      完整备份:完整的备份,每次对数据进行完整的备份

      增量备份:只有那些在上次完全备份或者增量备份后被修改的文件才会被备份

      差异备份:备份那些自上次完全备份后被修改的文件

  MySQL dump简介

    mysqldump是MySQL自带的逻辑备份工具

    备份原理:通过协议连接到MySQL数据库,将需要备份的数据查询出来,将查询的数据转换成对应的insert语句,当需要还原数据时,执                行这些insert语句,即可将对应的数据还原

  备份命令

    命令格式:

      mysqldump [选项] 数据库名 [表名] > 脚本名

      mysqldump [选项] --数据库名 [选项 表名] > 脚本名

      mysqldump [选项] --all-databases [选项] > 脚本名

      选项说明:

         

    实例

      备份所有数据库:mysqldump -uroot -p --all-databases > /backup/mysqldump/all.db

      备份指定数据库:musqldump -uroot -p test > /backup/mysqldump/test.db

      备份指定数据库指定表(多个表以空格间隔):mysqldump -uroot -p mysql db event > /back/mysqldump/table.db

      备份指定数据库排除某些表:mysqldump -uroot -p test --ignore-table=test.t1 --ignore-table=test.t2 > backup/mysqldump/test.db

  还原命令

    mysqladmin -uroot -p create db_name

    mysql -uroot -p db_name < /backup/mysqldump/db_name.db

    source方法(将SQL数据导入数据库)

      mysql > use 数据库名;

      mysql > source 文件路径;

    注:在导入备份数据库前,db_name如果没有,是需要创建的;而且与db_name.db中的数据库名称一样才能导入

配置文件优化(vi /etc/my.cnf)

    sort_buffer_size = 2M --线程占用内存,一个线程占用2M,不能设置太大,不然数据并发高容易崩溃

    query_cache_size = 64 --数据库的缓存建议设置小一点,因为数据库不适合大量大缓存

    query_cache_nim_res_unit = 2k --设置小资源能够存入数据库缓存

    tmp_table_size = 256M  --临时表,会占用磁盘空间

    long_query_time = 2 --慢查询时间,单位是秒,一般数据库慢查询不会超过2s

    log-slow-queries = /var/log/mysql-slow-log.log  --指定慢查询日志文件位置

    log-error = /var/log/mysql-error.log --定义错误日志

    expire_logs_days = 7 --自动删除7天的logs

    key_buffer_size = 2048M --索引数据内存大小,建议使用大一点

    skip-name-resolve --加这个参数防止数据库经常出现没有权限的报错

忘记数据库密码操作

  步骤

    a、停止服务:systemctl stop mysqld

    b、跳过密码直接登录:mysqld_safe  --skip-grant-table&

    c、登录:mysql

    d、修改密码:mysql> update mysql.user set password=password("1234") where user='root';

    e、更新数据库:mysql> flush privileger;

    f、kill进程mysqld:killall mysqld

    g、重启:systemctl restart mysqld

    h、验证:mysql -uroot -p1234

  有关内置库的说明:

    库mysql:表user存储的是用户名和密码信息。(在MySQL5.7中password字段已从mysql.user表中删除,新的字段名是authenticalion_string)

  补充有关information_schema库中的内容

    1.schemata:保存了当前服务器上所有的数据库名,字段

    mysql> desc schemata;

        

       查看其中的字段名:

    mysql> select schema_name from schemata;

    

 

 

  2.tables:保存了所有的库名(字段table_schema),和所有的表名(字段table_schema)

 

    mysql> desc tables;

 

    

 

 

   mysql> select table_schema,table_name from tables;

 

    

 

 

  3.clolumns:保存了所有的库名(字段table_schema),保存了所有的表名(字段table_name),保存了所有的字段名(字段column_name)

 

   mysql> desc columns;

 

    

 

 

   mysql> select column_name from information_schema.columns where table_schema='school' and table_name='DEPT';

    

   4.SQL注入流程:库—>表—>字段

二进制日志与慢查询日志

  二进制日志

  二进制日志默认是关闭的;二进制日志是记录数据的更改,目的是在恢复数据时能够最大程度的恢复数据库

  

 

 

 慢查询日志

 

  慢查询日志是记录所有执行时间超过long_time设置时间的SQL语句

 

  

 

 

  APP、应用、web反应慢?

  1.SQL语句本身逻辑问题

  2.索引失效,重建索引(查找是否使用索引:explain select * from 数据库名)

  3.服务器被攻击

主从复制

 修改服时间同步环境,在主节点上搭建时间同步服务器

  1.安装NTP服务器

    yum -y install ntp

  2.配置NTP服务器

    vi /etc/ntp.conf

    server 127.127.1.0  //设置本地供给源

    fudge 127.127.1.0 stratum 8 //设置时区为+08区

    systemctl restart ntpd  //重启ntp服务器

    systemctl enable ntpd  //设置开机自启

 在从节点服务器上进行时间同步

  yum -y install ntpdate

  ntpdate 主服务器IP地址

 修改主服务器

  打开主服务器上二进制日志

    vi /etc/my.cnf

    server_id = 11

    log_bin = master-bin(修改)

    log-slave-updates = true(增加)

  重启服务器

    systemctl restart mysqld

  进入mysql数据库,给服务器授权

    mysql -uroot -p

    grant replication slave on *.* to 'myslave'@'192.168.1.%' identified by '123456';

    flush privileges;

    show master status\G;

 修改从服务器

  打开从服务器的二进制日志

    vi /etc/my.cnf

    server-id = 22(修改)

    relay-log = relay-log-bin(增加)

    relay-log-index = slave-relay-bin.index(增加)

  重启mysqld

    systemctl restart mysqld

  数据库连接主服务器

    change master to master_host = '192.168.1.10',master_user = 'myslave,master password = '123456',master logfile = 'master-bin.000003',master_log_pos = 615;

  启动从服务器同步

    start slave;

    stop slave;

  查看slave状态确保I/O线程和sql线程为yes

    show slave status\G;

  备注:解决UUID重复问题方法

    mv /usr/local/mysql/data/auto.cnf  /usr/local/mysql/data/auto.cnf.bak

 

 

 

 

  

 

 

 

 

 

 

 

 

 

      

      

posted @ 2021-08-23 23:05  Ayheng  阅读(137)  评论(1编辑  收藏  举报