最近刚到新公司入职,公司的本地虚拟机都已经部署好了,直接把ip给我,我直接xshell链接就可以用,只不过上面的软件几乎没装,需要重新装。
而且是Linux(docker版),发现这种版本安装数据库的方式跟我之前的都不太一样。
1.下载MySQL服务器Docker映像
严格来说,无需单独下载服务器映像;但是,在创建Docker容器之前执行此步骤可确保您的本地映像是最新的。要下载MySQL Community Edition映像,请运行以下命令
docker pull mysql/mysql-server:tag
该tag是你想拉的图像版本的标签(例如5.5, 5.6,5.7, 8.0,或latest)。如果 省略,则使用标签,并下载最新版本的MySQL Community Server的映像。请参阅Docker Hub中mysql / mysql-server页面上可用版本的标签列表 。 :taglatest
实例:
[root@docker /]# docker pull mysql/mysql-server:5.7
5.7: Pulling from mysql/mysql-server
c7127dfa6d78: Pull complete
cb7ddde5230b: Pull complete
1528bee07386: Pull complete
cca3f8362bb0: Pull complete
Digest: sha256:5a5c0841346322ed514a48a7c2ab5409a8106e35718f3195467e7cf52343f25a
Status: Downloaded newer image for mysql/mysql-server:5.7
docker.io/mysql/mysql-server:5.7
您可以使用以下命令列出下载的Docker映像:
[root@docker /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 273c7fcf9499 3 days ago 455MB
mysql latest 8e8c6f8dc9df 3 days ago 546MB
rabbitmq 3.8.3-management 30e33de9be86 10 days ago 184MB
2.启动MySQL服务器实例
要为MySQL服务器启动新的Docker容器,请使用以下命令:
docker run --name=container_name -d image_name:tag
实例:
[root@docker /]# docker run --name=mysql -d mysql/mysql-server:5.7
d0bc9c92aa9dace83717bf0e587264be04b462eeb664daaa07090a26ef777846
初始化完成后,命令的输出将包含为root用户生成的随机密码。使用以下命令检查密码:
[root@docker /]# docker logs mysql 2>&1 | grep GENERATED
[Entrypoint] GENERATED ROOT PASSWORD: UNQEkyJ.ELfAg=4kysaP0DYpog2
这就成功生成了数据库随机密码:UNQEkyJ.ELfAg=4kysaP0DYpog2
测试链接数据库:
[root@docker /]# docker exec -it mysql mysql -uroot -p
Enter password:
把以上的随机密码填入即可成功进入数据库
由于随机密码过于复杂,所以需要重新修改密码,进入mysql shell命令:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.00 sec)
这就完成了,数据的密码重置。
以上这种方式不先预设初始密码,不设置端口,会比较麻烦,其一是还要重新设置密码,其二是远程访问也会报各种错,主要是3306端口没有开放,比较麻烦,之前用第一张方式捣腾了好久都没连上,血泪史啊!!!
查看服务器端口开放情况:
[root@docker conf]# netstat -ntlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 34343/sshd
tcp6 0 0 :::3306 :::* LISTEN 3139/docker-proxy
tcp6 0 0 :::22 :::* LISTEN 34343/sshd
建议用以下这种方式启动,方便快捷:
[root@docker ~]# docker run -p 3306:3306 -v $PWD/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql2 -d mysql/mysql-server:5.7
7196ff2f26b2fb7dfbc654fea7c4510065dd51f8f5e26700f58d4bda57644656
以上命令解释:
-p 3306:3306:将容器的3306端口映射到主机的3306端口;
-v$PWD/mysql:/var/lib/mysql:将主机当前目录下的/mysql挂载到容器的/var/lib/mysql;
-e MYSQL_ROOT_PASSWORD=password:初始化root用户的密码;
–name 给容器命名,mysql2;
如果遇到以下错误:
mysql1 -d mysql/mysql-server:5.7
726577ed3736bc6550f1b8b0b4db67fe8f85219f4e2b099bd056c96391ea9894
docker: Error response from daemon: driver failed programming external connectivity on endpoint mysql1 (26d7c9dd18ad0e1358e0a47ddb2b9da96f5461859e3e1c12abfdcc2e3f8c33f3): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 3306 -j DNAT --to-destination 172.17.0.2:3306 ! -i docker0: iptables: No chain/target/match by that name.
(exit status 1)).
那么需要重启docker服务后再启动容器:
systemctl restart docker
docker start ‘容器‘
当您运行docker ps命令时,该容器会出现在正在运行的容器列表中。例如:
[root@docker /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d0bc9c92aa9d mysql/mysql-server:5.7 "/entrypoint.sh mysq…" 9 seconds ago Up 8 seconds (health: starting) 3306/tcp, 33060/tcp mysql
或
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7196ff2f26b2 mysql/mysql-server:5.7 "/entrypoint.sh mysq…" 8 seconds ago Up 7 seconds (health: starting) 0.0.0.0:3306->3306/tcp, 33060/tcp mysql2
查看日志:
docker logs mysql
实例:
[root@docker /]# docker logs mysql
[Entrypoint] MySQL Docker Image 5.7.29-1.1.15
[Entrypoint] No password option specified for new database.
[Entrypoint] A random onetime password will be generated.
[Entrypoint] Initializing database
[Entrypoint] Database initialized
Warning: Unable to load '/usr/share/zoneinfo/iso3166.tab' as time zone. Skipping it.
Warning: Unable to load '/usr/share/zoneinfo/leapseconds' as time zone. Skipping it.
Warning: Unable to load '/usr/share/zoneinfo/tzdata.zi' as time zone. Skipping it.
Warning: Unable to load '/usr/share/zoneinfo/zone.tab' as time zone. Skipping it.
Warning: Unable to load '/usr/share/zoneinfo/zone1970.tab' as time zone. Skipping it.
[Entrypoint] GENERATED ROOT PASSWORD: UNQEkyJ.ELfAg=4kysaP0DYpog2
[Entrypoint] ignoring /docker-entrypoint-initdb.d/*
[Entrypoint] Server shut down
[Entrypoint] Setting root user as expired. Password will need to be changed before database can be used.
[Entrypoint] MySQL init process done. Ready for start up.
[Entrypoint] Starting MySQL 5.7.29-1.1.15
3.集装箱壳访问
要具有对MySQL Server容器的shell访问权限,请使用 docker exec -it命令在容器内部启动bash shell:
[root@docker /]# docker exec -it mysql bash
bash-4.2#
然后,您可以在容器内运行Linux命令。例如,要查看容器内服务器的数据目录中的内容,请使用以下命令,如:
[root@docker /]# docker exec -it mysql bash
bash-4.2# mysql -uroot -p
Enter password:
这样就无需在命令前使用:
docker exec -it
如:
docker exec -it mysql mysql -uroot -p
数据库配置可远程访问:
mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
这里‘123456’需要改成自己的密码
重载授权表:
FLUSH PRIVILEGES;
4.停止和删除MySQL容器
要停止我们创建的MySQL Server容器,请使用以下命令:
docker stop mysql1
要再次启动MySQL Server容器:
docker start mysql1
要使用单个命令停止并重新启动MySQL Server容器:
docker restart mysql1
要删除MySQL容器,请先将其停止,然后使用 docker rm命令:
docker stop mysql1
docker rm mysql1
5.升级MySQL服务器容器
详见mysql官网:https://dev.mysql.com/doc/refman/8.0/en/docker-mysql-getting-started.html