Linux使用docker安装mysql

12 篇文章 0 订阅
10 篇文章 0 订阅

最近刚到新公司入职,公司的本地虚拟机都已经部署好了,直接把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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值