MySQL 5.7 忘记root密码怎么解决

添加 skip-grant-tables 配置

[mysqld]
skip-grant-tables

重启 mysql server, 使用命令 service mysql restart

mysql -uroot # 使用 root 登录 mysql

update mysql.user set plugin = 'mysql_native_password', authentication_string = password('hello') where user = 'root'; # 把密码设置为hello

屏蔽 skip-grant-tables 配置

[mysqld]
# skip-grant-tables

重启 mysql server


这篇文章: 有用 无用 创建 2016-11-29 00:22:35 / 更新 2017-02-18 02:36:53

MySQL utf8mb4

my.cnf

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
collation-server = utf8mb4_unicode_ci
init-connect='SET NAMES utf8mb4'
character_set_server = utf8mb4

如果是设置成utf8的话

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8

如果你的数据表不是utf8mb4,那么我们应该如何存储utf8mb4的字符呢?

你可以 uri_escape 后再存储,用的时候 uri_unescape


这篇文章: 有用 无用 创建 2016-11-08 12:23:39 / 更新 2017-02-03 19:34:20

MAC OS 下怎样找到 MySQL 的配置文件

Run: sudo fs_usage | grep my.cnf

This will report any filesystem activity in real-time related to that file.In another Terminal, restart your MySQL, e.g.

brew services restart mysql

On terminal with fs_usage, the proper location should be shown, e.g.

20:26:32  stat64            /usr/local/Cellar/mysql/5.7.10/my.cnf      0.000002   my_print_def

20:26:32  stat64            /Users/asthman/.my.cnf                     0.000003   my_print_def

20:26:32  stat64            private/etc/my.cnf                         0.000006   my_print_def

20:26:32  stat64            /usr/local/etc/my.cnf                      0.000002   my_print_def

So if the file doesn't exist, create one.

上面的配置文件都没有,所以我就创建了一个 /usr/local/etc/my.cnf,然后写上自己的配置就好了


这篇文章: 有用 无用 创建 2016-08-19 01:27:57 / 更新 2017-02-07 19:58:46

大表操作 (添加字段,添加索引等)

pt-online-schema-change

1) 使用前看文档, 注意:

  • 工具的已知bug
  • 使用前在非生产环境测试
  • 备份

2) 用法:

pt-online-schema-change [OPTIONS] DSN(Data Source Name)

3) 参数:

DSN OPTIONS

D=database,h=host,u=user,p=password,P=port,t=table

--dry-run (建立并修改新表, 不建立触发器, 不拷贝数据, 不替换原表) 和 --execute (确定开始改表) 是互斥的

--alter 'add column age tinyint unsigned default 0 not null, add index user_age (user_id,age)'

--no-check-replication-filters

--no-drop-old-table


这篇文章: 有用 无用 创建 2015-03-05 09:38:37 / 更新 2017-02-07 19:58:55

mysql explain filesort

一个排序语句如果没有用到索引, 那么 explain 的时候就会有 filesort. 这个 filesort 其实采用的是快速排序的算法.


这篇文章: 有用 无用 创建 2015-01-20 10:36:25 / 更新 2017-02-07 19:58:56

为什么 mysql slave 同步慢

  1. show slave status\G

  2. 查看 Relay_Log_File 字段, 得到 relay log 的文件名

  3. cd /var/lib/mysql

  4. mysqlbinlog mysqld-relay-bin.005347 > /tmp/mysqld-relay-bin.005347.txt

  5. grep 'update ' /tmp/mysqld-relay-bin.005347.txt | perl -ane 'END {foreach ( sort {$seen{$b}<=>$seen{$a}} keys %seen ) {print $_, "=>", $seen{$_}, "\n"} } $seen{$F[1]}++' # 找出哪个表更新的多

    grep 'insert into ' /tmp/mysqld-relay-bin.005347.txt | perl -ane 'END {foreach ( sort {$seen{$b}<=>$seen{$a}} keys %seen ) {print $_, "=>", $seen{$_}, "\n"} } $seen{$F[2]}++' # 找出哪个表插入的多


这篇文章: 有用 无用 创建 2014-07-25 15:41:25 / 更新 2017-02-07 19:59:20

打开 mysql 的 query log

vi /etc/mysql/my.cnf

打开 general_log_file = /var/log/mysql/mysql.log

mysql 控制台

SET global general_log = 1|0, 动态控制打开或关闭 query log

tail -f /var/log/mysql/mysql.log


这篇文章: 有用 无用 创建 2014-06-23 03:12:15 / 更新 2014-11-10 05:14:40