跳转至

MySQL基础

连接

mysql -u root -p

基础命令 启动|停止|重启服务|重新加载|状态

service mysqld {start|stop|restart|reload|status}


修改 root 账户的 Host

# 使用 mysql 数据库
use mysql;
# 查看 user 数据表当前已有的数据
select * from user \G;
# 只看host和user
select host, user from user;
# 修改一条 root 数据,并刷新MySQL的系统权限相关表,%表示没有限制
update user set Host = '%' where Host = 'localhost' and User='root';
flush privileges;

修改root密码

忘记root 密码下如何修改密码

# nano /etc/my.cnf,添加 skip-grant-table(跳过权限验证)
# systemctl restart mysqld //重启服务
# 刷新权限表:flush privileges;
# mysql 登录:mysql -uroot -p(无需密码)

# 密码重置
# 把root的旧密码置空
# mysql8.0以上
use mysql;
update user set authentication_string='' where user='root';
# Mysql5.7+ password字段 已改成 authentication_string字段

# 重置成新密码
alter user 'root'@'localhost' identified by 'newpassword';
# Mysql8.0之前:
update user set password=password('password123456') where user='root';


新建用户

注意:主机名=%,这意味着您可以从任何主机地址访问此数据库服务器

# 首先,在MySQL Shell中创建一个名为“newUser”的新用户:
CREATE USER 'newUser'@'%' IDENTIFIED BY 'password';
#首先要做的是向用户提供必要的权限,在这里,我已将所有权限授予特定的用户。
GRANT ALL PRIVILEGES ON * . * TO 'newUser'@'%';
# 重新加载所有特权。
FLUSH PRIVILEGES;
#如果要允许特定用户使用IP,请按照以下192.168.1.%
GRANT ALL PRIVILEGES ON * . * TO 'newUser'@'192.168.1.%';

# Mysql8.0
CREATE USER 'root'@'172.17.0.4' IDENTIFIED WITH mysql_native_password BY '12345';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'172.17.0.4';
FLUSH PRIVILEGES;

host可填参数

mysql清理binlog

//查看binlog是否开启,log_bin的状态未ON,表明binlog日志开启
show variables like 'log_%';

//查看binary log
show binary logs;

//删除binlog日志文件,切勿删除正在使用的binlog!!
//删除1天前的binlog日志文件
PURGE MASTER LOGS BEFORE DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY);

//将指定时间之前的binlog清掉:
purge binary logs before '2019-11-25 13:09:51';  

//将bin.000011之前的binlog清掉:
purge binary logs to 'bin.000011';  

设置binlog过期时间

//设置binlog的过期时间,binlog失效日期参数为 binlog_expire_logs_seconds,默认2592000(30天)过期,可以设置 604800(7天)
show variables like '%expire%';
set global binlog_expire_logs_seconds=60*60*24;
flush logs;

binlog_expire_logs_seconds设置之后不会立即清除过期的,触发条件是: binlog大小超过max_binlog_size;手动执行flush logs;重新启动时(MySQL将会new一个新文件用于记录binlog)

如果binlog非常多,不要轻易设置改参数,有可能导致io争用,所以我先使用purge命令清除旧的binlog。过期时间设置的要恰当,对于主从复制,要看从库的延迟决定过期时间,避免主库binlog还未传到从库便因过期而删除,导致主从不一致!

也可以直接修改my.ini配置文件,关闭修改再重启

# 自动删除15天前的日志。默认值为0,表示从不删除。
expire_logs_days = 7 

关闭binlog日志

关闭mysql服务,找到my.ini, 在[mysqld] 下添加 skip-log-bin,然后重启MySQL,不可以不关闭的情况下,修改重启。

[mysqld] 
...
...
skip-log-bin

上面的方法不行,可以尝试下面这种

#log-bin=mysql-bin #注释掉之后,会关闭binlog日志
#binlog_format=mixed #注释掉之后,会关闭binlog日志