图片 1

docker mysql authentication_string client does not support authentication 连接难题

docker安装mysql后,本地navicat连接报错client does not support
authentication

问题描述:

  1. 增加/删除用户
    create user ‘username’@’localhost’ identified by ‘password’;
    其中localhost是限制登录方法,localhost是本地登录,%是不限制登录方式
    drop user ‘username’@’localhost’;删除用户
  2. 授权
    grant all privileges on . to ‘username’@’localhost’ identified by
    ‘password’;
    其中第一个是数据库,第二个是数据表,all
    pribileges可以换为select,update,…
  3. 修改Root密码
    use mysql;
    update user set authentication_string=password(‘xfgeg’) where
    user=’root’;
    新版本mysql中mysql.user表已经没有password字段,改为authentication_string
  4. 操作完更新信息表
    flush privileges;
  5. 基本操作
    create database XXX;
    use XXX;
    create table yyy (
    id INT NOT NULL AUTO_INCREMENT,
    experimenter VARCHAR(30) not null,
    t7 DOUBLE,
    NOTE VARCHAR(100),
    exp_date DATETIME NOT NULL default now(),
    PRIMARY KEY(id)
    );
    delete from yyy;
    truncate table yyy; //删除所有记录,id从1开始
    其中now()是mysql中的一个函数可以默认插入当前时间。
  6. mysql> create table a like users; //复制表结构
  7. DROP TABLE table_name ; //删除表
  8. select count(*) from table_names; //查询个数
    ————————————————————————————更新————————————————————

解决办法:

图片 1

忘记root 密码

参考:http://blog.51cto.com/lxsym/477027
1.修改MySQL的登录设置:
vi /etc/my.cnf
在[mysqld]的段中加上一句:skip-grant-tables 保存并且退出vi。
2.重新启动mysqld
/etc/init.d/mysqld restart ( service mysqld restart )
3.登录并修改MySQL的root密码(见上)
4.将MySQL的登录设置修改回来
vi /etc/my.cnf
将刚才在[mysqld]的段中加上的skip-grant-tables删除,保存并且退出vi。
5.重新启动mysqld
/etc/init.d/mysqld restart ( service mysqld restart )
6.恢复服务器的正常工作状态

1. docker ps -a 查找到容器id

 ERROR 1130 (HY000): Host
‘localhost’ is not allowed to connect to this MySQL server

连接报错 Character set ‘utf8mb4’ is not a compiled character set and is not specified in the ‘/usr/share/mysql/charsets/Index.xml’ file

参考http://www.aichengxu.com/mysql/11824.htm
把配置文件/usr/share/mysql/charsets/Index.xml中的utf8编码改为utf8mb4即可,<charset
name=”utf8″>改为<charset name=”utf8mb4″>

2. docker exec -it id /bin/bash 进入mysql容器 

首先网上的问题大部分是远程登陆MySQL,用户Ip没有权限,用本机登陆增加权限。但是我的就是本地都进不去。。。

查询用户

SELECT DISTINCT CONCAT(‘User: ”’,user,”’@”’,host,”’;’) AS query FROM
mysql.user;

3.mysql -u root -proot登陆mysql

安装的是官网的mysql免安装版  

重置从1递增

alter table table_name auto_increment=1;

此处比较奇怪,我在docker中启动mysql容器指定密码是123456但是123456登陆不了,使用密码root可以登陆

安装mysql的艰辛历程:

4.use mysql; 进入mysql

(1)免安装版,

5.查询用户表信息:

免安装版要领两个,配置环境变量,配置my.ini,然后在dos系统中

select host,user,authentication_string from user ; 

mysqld –install

6.更改host为% user为root的用户的authentication_string

输入 mysqld --initialize-insecure --user=mysql; 初始化数据文件

host为%大家可以百度一下,说是方便远程连接

然后再次启动mysql
然后用命令 mysql –u root –p 进入mysql管理界面(密码可为空)

update user set authentication_string = ‘root’ where user = ‘root’ and
host = ‘%’;

修改密码:update mysql.user set
authentication_string=password(‘123456789′)
where user=’root’ and Host = ‘localhost’;

update user set authentication_string = ‘root’ where user = ‘root’ and
host = ‘localhost’;

刷新权限:flush privileges;

7.如果还不行使用下面语句:

查看服务是否启动:net start mysql

alter user ‘root’@’localhost’ identified with mysql_native_password by
‘123456’;

(2)安装可执行程序版,  

alter user ‘root’@’%’ identified with mysql_native_password by
‘123456’;

可执行程序版本一直点下一步即可,会有一个海豚一样的服务界面