参考:https://blog.csdn.net/taikeqi/article/details/106026038

使用mysql用户启动服务

创建mysql用户和组

加强root用户口令

删除默认数据库和用户

  1. mysql> drop database test;
  2. Query OK, 0 rows affected (0.00 sec)
  3. mysql> use mysql;
  4. Database changed
  5. mysql> delete from db;
  6. Query OK, 2 rows affected (0.00 sec)
  7. mysql> delete from user where not(host="localhost" and user="root");
  8. Query OK, 4 rows affected (0.00 sec)
  9. # 执行此条命令后,可能导致远程无法连接,因为mysql.user表中只剩余root并且host为localhost时才可以登录;
  10. mysql> flush privileges;
  11. Query OK, 0 rows affected (0.00 sec)

修改默认管理员名称

  1. mysql> use mysql;
  2. Database changed
  3. mysql> update user set user="admindb" where user="root";
  4. Query OK, 2 rows affected (0.01 sec)
  5. Rows matched: 2 Changed: 2 Warnings: 0
  6. mysql> flush privileges;
  7. Query OK, 0 rows affected (0.00 sec)
  8. mysql>

修改默认端口号

  1. [mysqld]
  2. port = 6033

启动报错 [root@localhost mysql]# service mysql startStarting MySQL… ERROR! The server quit without updating PID file (/var/lib/mysql/localhost.localdomain.pid).

查看错误日志: 2021-07-09 01:35:59 30111 [ERROR] Can’t start server: Bind on TCP/IP port: Permission denied2021-07-09 01:35:59 30111 [ERROR] Do you already have another mysqld server running on port: 6033 ? 2021-07-09 01:35:59 30111 [ERROR] Aborting

可能原因1:防火墙没有打开 可能原因2:SELinux 处理开启中 关闭方法一(不用重启服务器,重启后失效):setenforce 0 关闭方法二(需重启服务器,永久生效): vim /etc/selinux/config
SELINUX=disabled

提高本地安全性

load data infile 命令可以很高的速度从一个文本文件中读取行到一个表中,如黑客通过这个命令把/etc/passwd获取了,会对系统构成威胁,我们可以禁用该功能。
编辑my.cnf,[mysqld]部分加上一个参数:

  1. [mysqld]
  2. local-infile=0
  3. #默认为NULL,
  4. #如果配置为/home,则只允许导入/home目录下的文件,
  5. #如果配置为空字符串,则允许导入任何目录下的文件,
  6. #如果为NULL,则禁用此命令
  7. # secure-file-priv=NULL

使用以下命令可查看当前配置 show variables like ‘%infile%’ show variables like ‘%secure_file_priv%’

禁止远程连接

编辑my.cnf,[mysqld]部分加上一个参数:

  1. [mysqld]
  2. skip-networking

控制数据库访问权限

  1. mysql> create database db1;
  2. mysql> grant select,insert,update,delete,create,drop on db1.* to test1@localhost identified by '123456';

以上SQL创建一个数据库db1,同时增加了一个test1用户,口令是123456,但是它只能从本地连接mysql,对db1库有select,insert,update,delete,create,drop操作权限

忘记mysql密码的解决办法

如果不幸运的忘记了MySQL的root密码,我们可以在启动MySQL服务器时加上参数—skip-grant-tables来跳过授权表的验证 (./safe_mysqld —skip-grant-tables &),这样我们就可以直接登陆MySQL服务器,然后再修改root用户的口令,重启MySQL就可以用新口令登陆了。

也可以编辑my.cnf文件,在[mysqld]下添加以下配置

  1. [mysqld]
  2. #使其登录时跳过权限检查
  3. skip_grant_tables

当设置完密码后,记得注释掉该配置

添加此配置后,直接使用mysql 即可登录

  1. [root@localhost /]# mysql
  2. Welcome to the MySQL monitor. Commands end with ; or \g.
  3. Your MySQL connection id is 5
  4. Server version: 5.6.42 MySQL Community Server (GPL)
  5. Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
  6. Oracle is a registered trademark of Oracle Corporation and/or its
  7. affiliates. Other names may be trademarks of their respective
  8. owners.
  9. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  10. mysql>

全方位日志配置

  1. #错误日志
  2. log_error=/var/lib/mysql/error.log
  3. log_output=FILE
  4. #普通日志
  5. general_log=on
  6. general_log_file=/var/lib/mysql/log.log
  7. #慢查询日志
  8. slow_query_log=on
  9. #慢于2秒的会被记录
  10. long_query_time=2
  11. slow_query_log_file=/var/lib/mysql/log_slowquery.log
  12. #binlog日志
  13. #第一个参数是打开binlog日志
  14. #第二个参数是binlog日志的基本文件名,后面会追加标识来表示每一个文件
  15. #第三个参数指定的是binlog文件的索引文件,这个文件管理了所有的binlog文件的目录
  16. log_bin=ON
  17. log_bin_basename=/var/lib/mysql/binlog
  18. log_bin_index=/var/lib/mysql/binlog.index
  19. #bin_log简化的配置:和上面三个的作用是相同的,mysql会根据这个配置自动设置log_bin为on状态,自动设置log_bin_index文件为你指定的文件名后跟.index
  20. #mysql-5.6.42版本使用上面的log_bin分开设置的方法启动报错,使用log_bin可以开启。
  21. #log_bin=/var/lib/mysql/binlog/mysql
  22. #如果是5.7及以上版本的话,重启mysql服务会报错。这个时候我们必须还要指定这个参数
  23. #随机指定一个不能和其他集群中机器重名的字符串,如果只有一台机器,那就可以随便指定了
  24. server-id=1

删除命令执行记录

我们执行的bash命令会写入用户目录的.bash_history文件,如果这些文件不慎被读,那么数据库的密码就会泄漏。
用户登陆数据库后执行的SQL命令也会被MySQL记录在用户目录的.mysql_history文件里。如果数据库用户用SQL语句修改了数据库密码,也会因.mysql_history文件而泄漏。
所以我们在shell登陆及备份的时候不要在-p后直接加密码,而是在提示后再输入数据库密码。

执行以下命令不让他记录我们的操作

rm .bash_history .mysql_history
ln -s /dev/null .bash_history
ln -s /dev/null .mysql_history