docker run -p 3307:3306 --name mysql \
-v /mydata/mysql/conf/my.cnf:/etc/mysql/my.cnf \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/mysql-files:/var/lib/mysql \
-v /mydata/mysql/secure-file-priv:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:8.0.24
注:
1.此时docker中mysql的3306端口映射到linux上的3307端口(因我linux服务器中docker外部已安装了mysql,3306已被占用),可自定义,挂载到linux上未被其他进程占用的空闲端口即可。
2.docker中的配置文件被挂载到了linux中/mydata目录下中(mydata内的文件夹手动或非手动创建都行,非手动创建的话会自动生成。)
3.若外部通过sqlyog连接不上docker中的mysql,需先在docker内部docker ps一下,看mysql是否还在运行。
4.若docker ps后发现mysql一直在运行,但sqlyog连不上,可先在docker中进入mysql,通过命令进行配置,再在外面进行连通。
命令配置如下:
1.进入mysql
docker exec -it mysql /bin/bash
(-p后面是我创建的数据库实例中root用户的密码,我创建实例中设的root密码是123456,自己创建实例时密码根据个人兴趣设定即可)。
mysql -uroot -p123456;
3.输入sql语句
use mysql;
select host,user,plugin,authentication_string from user;
5.注:下面这句若提示错误则可能是root用户的密码不是123456,写错密码了(我创建实例中设的root密码是123456,自己创建实例时密码根据个人兴趣设定即可)。
create user root@'%' identified by '123456';
grant all privileges on *.* to root@'%' with grant option;
注:下句是将user表中plugin字段中root用户的密码设为mysql_native_password(即改为自己的密码),自己的密码不是123456的,此语句中需要写自己的密码(我创建实例中设的root密码是123456,自己创建实例时密码根据个人兴趣设定即可)。
alter user 'root'@'%' identified with mysql_native_password by '123456';
select host,user,plugin,authentication_string from user;
flush privileges;
注:在docker中的mysql中语句界面,先输入exit;或quit;退出sql命令模式到mysql账号处,再在mysql账号处输入exit;退出到linux用户处。
8.
linux服务器中配置docker开机自启(linux一开,docker就开):
systemctl enable docker.service
docker中配置mysql开机自启(docker一开,mysql就开):
docker update --restart=always mysql