使用mysql用户启动服务
加强root用户口令
删除默认数据库和用户
mysql> drop database test;
Query OK, 0 rows affected (0.00 sec)
mysql> use mysql;
Database changed
mysql> delete from db;
Query OK, 2 rows affected (0.00 sec)
mysql> delete from user where not(host="localhost" and user="root");
Query OK, 4 rows affected (0.00 sec)
# 执行此条命令后,可能导致远程无法连接,因为mysql.user表中只剩余root并且host为localhost时才可以登录;
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
修改默认管理员名称
mysql> use mysql;
Database changed
mysql> update user set user="admindb" where user="root";
Query OK, 2 rows affected (0.01 sec)
Rows matched: 2 Changed: 2 Warnings: 0
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql>
修改默认端口号
[mysqld]
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]部分加上一个参数:
[mysqld]
local-infile=0
#默认为NULL,
#如果配置为/home,则只允许导入/home目录下的文件,
#如果配置为空字符串,则允许导入任何目录下的文件,
#如果为NULL,则禁用此命令
# secure-file-priv=NULL
使用以下命令可查看当前配置 show variables like ‘%infile%’ show variables like ‘%secure_file_priv%’
禁止远程连接
编辑my.cnf,[mysqld]部分加上一个参数:
[mysqld]
skip-networking
控制数据库访问权限
mysql> create database db1;
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]下添加以下配置
[mysqld]
#使其登录时跳过权限检查
skip_grant_tables
当设置完密码后,记得注释掉该配置
添加此配置后,直接使用mysql 即可登录
[root@localhost /]# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.6.42 MySQL Community Server (GPL)
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
全方位日志配置
#错误日志
log_error=/var/lib/mysql/error.log
log_output=FILE
#普通日志
general_log=on
general_log_file=/var/lib/mysql/log.log
#慢查询日志
slow_query_log=on
#慢于2秒的会被记录
long_query_time=2
slow_query_log_file=/var/lib/mysql/log_slowquery.log
#binlog日志
#第一个参数是打开binlog日志
#第二个参数是binlog日志的基本文件名,后面会追加标识来表示每一个文件
#第三个参数指定的是binlog文件的索引文件,这个文件管理了所有的binlog文件的目录
log_bin=ON
log_bin_basename=/var/lib/mysql/binlog
log_bin_index=/var/lib/mysql/binlog.index
#bin_log简化的配置:和上面三个的作用是相同的,mysql会根据这个配置自动设置log_bin为on状态,自动设置log_bin_index文件为你指定的文件名后跟.index
#mysql-5.6.42版本使用上面的log_bin分开设置的方法启动报错,使用log_bin可以开启。
#log_bin=/var/lib/mysql/binlog/mysql
#如果是5.7及以上版本的话,重启mysql服务会报错。这个时候我们必须还要指定这个参数
#随机指定一个不能和其他集群中机器重名的字符串,如果只有一台机器,那就可以随便指定了
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