sheng的学习笔记-docker部署数据库oracle,mysql,支持windows和mac
用docker安装oracle,在macbook中用DBeaver连接成功数据库。有oracle和mysql数据库,支持windows 7和mac系统
docker基础知识可参考 sheng的学习笔记-docker部署,原理图,命令,用idea设置docker
目录
默认的管理员用户名 sys 密码 oracle 作为dba登录
引导顺序:
1)先看docker安装数据库系列(支持win的oracle和mysql,macbook的oracle和mysql)
2)如果是win的oracle,看下 装完ORACLE之后的统一操作 这部分,如果只是玩玩,无所谓,但我的数据超过20G,C盘顶不住了,并且出现了密码过期,数据超过默认数据库限制,下面都有解决方案
装完ORACLE之后的统一操作:
以下操作都要用dba权限做,docker安装后的dba的用户名密码在下面有
修改密码期限
装完后提示密码7天过期,就算新创建了用户名和密码,密码也是180天过期:
修改一下密码(原先密码就是这个,没改,这里可以改也可以不该):
alter user system identified by oracle;
断开连接,重新连接,就不报错了
将密码设置为永远不过期
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
做完以后用命令检查一下
select * from dba_profiles where profile='DEFAULT' and resource_name='PASSWORD_LIFE_TIME';
修改数据空间
增加数据文件,空间改为10G
以下命令找一下文件路径
SELECT * FROM dba_data_files

运行这个命令 ,路径要跟上面的一样,这是一次性加10G的空间
ALTER TABLESPACE SYSTEM ADD DATAFILE '/u01/app/oracle/oradata/XE/system1.dbf' SIZE 10G AUTOEXTEND ON;
这是每次加一点,最多加10G的空间(这是xe版本的,如果是标准版的可以更大一些)
ALTER TABLESPACE SYSTEM ADD DATAFILE '/u01/app/oracle/oradata/XE/system1.dbf' SIZE 100M AUTOEXTEND ON NEXT 100M MAXSIZE 10G;
完整的命令,供参考
docker run -d -p 1523:1521 --name oracle11g_wh_01 deepdiver/docker-oracle-xe-11g
docker exec -it c0f22826d5d2 /bin/bash
sqlplus system/oracle
create user lzs identified by lzs;
grant connect,resource to lzs;alter user system identified by oracle;
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
ALTER TABLESPACE SYSTEM ADD DATAFILE '/u01/app/oracle/oradata/XE/system1.dbf' SIZE 100M AUTOEXTEND ON NEXT 100M MAXSIZE 10G;
docker安装数据库
-
mac版本
-
安装oracle
-
下载oracle镜像
打开终端,输入
docker search oracle
我这里下载的是 oracle-xe-11g,在终端中输入
sudo docker pull deepdiver/docker-oracle-xe-11g
来拉取镜像,等下载好了以后,输入
docker images
来查看镜像,可以看到刚下载的镜像
-
创建容器,运行Oracle
sudo docker run -d -p 1521:1521 --name oracle11g deepdiver/docker-oracle-xe-11g
来创建容器并运行,其中1521:1521中前面的1521表示本机的端口号,后面的1521表示Docker中映射的端口号(!!!注意:后面那个1521端口号一定不能更改,只能根据自己的需求更改前面的端口号,作者建议不要更改,因为Oracle没有Mac版本所以一般不会出现端口冲突)
-
来查看容器的运行情况
输入
docker ps
然后复制id,我这里的ID是640f1e53bb05,然后在终端中输入
sudo docker exec -it 640f1e53bb05 /bin/bash
进入shell容器,这里-it后面的就是我们刚刚复制的id
-
调试Oralce
进入shell容器以后输入
sqlplus system/oracle
出现如下图所示表示成功
-
默认的管理员用户名 sys 密码 oracle 作为dba登录
-
创建一个用户,并授权
create user JYL identified by a;
我的是 create user lzs1 identified by lzs;
grant connect,resource to lzs1;
这里JYL可以替换成自己的用户名,a可以替换成自己的密码;这两个东西之后链接数据库的时候需要用到。
提示User created.说明用户创建成功。
使用select * from all_users;就可以看到刚刚创建好的用户。
然后我们为这个用户授权grant connect,resource to JACK;,注意这里的用户名必须全部大写。
提示Grant succeeded.之后说明授权成功。

-
测试数据库
我用的是DBeaver连接数据库

如果第一次下载,会要求安装驱动


注意:这里的服务名是:XE,与Windows有区别,填写完所有信息以后点击左下角的“测试连接”,显示连接成功以后点击右下角的确定即可
-
创建表测试
CREATE TABLE student (
id NUMBER(5) PRIMARY KEY,
name VARCHAR2(30),
age NUMBER(3) CHECK (age >= 0 AND age <= 100)
);
INSERT INTO STUDENT s (id,name,age) values(1,'zhangsan',20)
SELECT * FROM student;
安装oracle 19c
mac方法跟win一样,看下面文章windows的安装oracle 19c
安装mysql
-
下载mysql镜像
打开终端,输入
docker search mysql

终端输入
docker pull mysql:latest
来拉取镜像,等下载好了以后,输入
docker images
来查看镜像,可以看到刚下载的镜像
-
创建容器,运行mysql
docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql
–name:容器名,此处命名为mysql
-e:配置信息,此处配置mysql的root用户的登陆密码
-p:端口映射,此处映射 主机3306端口 到 容器的3306端口
-d:后台运行容器,保证在退出终端后容器继续运行
-
来查看容器的运行情况
输入docker ps

复制id,我这里是24624966d8c8,
输入
docker exec -it 24624966d8c8 /bin/bash
这将打开 Bash 终端,并把你放在正在运行的 MySQL 容器中。在容器中,您可以执行各种 MySQL 命令,包括创建用户、授权和配置等
-
调试mysql
接下来,我们需要登录 MySQL 并进行一些配置。使用以下命令打开 MySQL:
mysql -u root -p
输入密码,密码是创建容器的命令中的密码

-
创建一个用户,并授权
然后输入您之前设置的密码。登录成功后,我们需要创建一个新用户,并授予该用户适当的权限。使用以下命令创建名为 `remote_user` 的新用户:
CREATE USER 'lzs_mysql'@'%' IDENTIFIED BY 'your_password';
其中,`remote_user` 是您自己设置的用户名,`your_password` 是该用户的密码。`%` 是通配符,表示任何 IP 地址都可以连接到 MySQL 服务器。接下来,使用以下命令为该用户授予适当的权限
GRANT ALL ON *.* TO 'lzs_mysql'@'%';
此命令授予 `remote_user` 用户对 MySQL 服务器上所有数据库和表的完全访问权限。
-
测试数据库


有报错

Public Key Retrieval is not allowed:不允许进行公钥检索
解决方案:
在编辑连接中找到allowPublicKeyRetrieval 设置成TRUE


点击测试连接,可以看下能否连接成功
-
创建表测试
CREATE TABLE student (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
age INT UNSIGNED NOT NULL
);
INSERT INTO student(name,age) values('zhangsan',20)
select * from student ;

windows
前置设置改造(可选,数据库的数据量很大必看,我踩坑了)
注意,最好将DOCKER的Disk image location修改一下位置,默认是C盘,如果新创建数据库的数据很多,C盘会被撑爆
如果还没有安装,用这个命令安装:
start /w "" "Docker Desktop Installer.exe" install -accept-license --installation-dir="D:\docker\app" --wsl-default-data-root="D:\docker\data" --windows-containers-default-data-root="D:\\docker"
win11安装的Docker 坎 - 知乎 参考这个文章
如果已经安装了,用下面的方式改一下位置
用管理员权限打开docker desktop软件,在这里将位置迁移到d盘,browse选的是d:盘,软件默认的自己加上DockerDesktop文件夹,最好是空的docker就迁移,不然各种报错

如果要做数据迁移,一定要做数据备份

这个位置加一下d盘设置
-
安装oracle
-
下载oracle镜像
打开终端,输入
docker search oracle
我这里下载的是 oracle-xe-11g,在终端中输入
docker pull deepdiver/docker-oracle-xe-11g
来拉取镜像,等下载好了以后,输入
docker images
来查看镜像,可以看到刚下载的镜像
-
创建容器,运行Oracle
docker run -d -p 1521:1521 --name oracle11g deepdiver/docker-oracle-xe-11g
来创建容器并运行,其中1521:1521中前面的1521表示本机的端口号,后面的1521表示Docker中映射的端口号(!!!注意:后面那个1521端口号一定不能更改,只能根据自己的需求更改前面的端口号,作者建议不要更改,因为Oracle没有Mac版本所以一般不会出现端口冲突)
-
来查看容器的运行情况
输入
docker ps
然后复制id,我这里的ID是a6a3676c6a12,然后在终端中输入
docker exec -it a6a3676c6a12 /bin/bash
进入shell容器,这里-it后面的就是我们刚刚复制的id
-
调试Oralce
进入shell容器以后输入
sqlplus system/oracle
出现如下图所示表示成功
-
创建一个用户,并授权
create user JYL identified by a;
我的是 create user lzs1 identified by lzs;
grant connect,resource to lzs1;
这里JYL可以替换成自己的用户名,a可以替换成自己的密码;这两个东西之后链接数据库的时候需要用到。
提示User created.说明用户创建成功。
使用select * from all_users;就可以看到刚刚创建好的用户。
然后我们为这个用户授权grant connect,resource to JACK;,注意这里的用户名必须全部大写。
提示Grant succeeded.之后说明授权成功。

-
测试数据库
我用的是DBeaver连接数据库

如果第一次下载,会要求安装驱动


注意:主机的ip,应该是docker虚拟机的ip,而不是本机,填写完所有信息以后点击左下角的“测试连接”,显示连接成功以后点击右下角的确定即可
-
创建表测试
CREATE TABLE student (
id NUMBER(5) PRIMARY KEY,
name VARCHAR2(30),
age NUMBER(3) CHECK (age >= 0 AND age <= 100)
);
INSERT INTO STUDENT s (id,name,age) values(1,'zhangsan',20)
SELECT * FROM student;
安装oracle19c
上面的是安装Oracle11g的xe,不爽,换个新版本的(但是需要配置比较高,自己选)
下载镜像
# oracle 19c的镜像
docker pull registry.cn-hangzhou.aliyuncs.com/laowu/oracle:19c

创建个数据卷
注意,以下命令可能包含中文空格,会导致docker报错,自己把空格都去掉,改成英文空格。虽然我是英文空格,但是上传到csdn后,再拷贝,就有中文空格
docker volume create oracle19c_data_wh
用root权限赋权,若权限设错,Oracle 容器可能无法写入数据。
docker run --rm --user root -v oracle19c_data_wh:/opt/oracle registry.cn-hangzhou.aliyuncs.com/laowu/oracle:19c bash -c "chown -R 54321:54321 /opt/oracle && chmod -R 775 /opt/oracle"
安装容器
docker run -d -p 1525:1521 -p 5500:5500 --name oracle19c_wh -e ORACLE_SID=ORCLCDB -e ORACLE_PDB=ORCLPDB1 -e ORACLE_PWD=Oracle123 -v oracle19c_data_wh:/opt/oracle --shm-size=2g registry.cn-hangzhou.aliyuncs.com/laowu/oracle:19c
-p 1525:1521 |
将宿主机 1525 端口映射到容器内 Oracle 监听端口 1521 |
-p 5500:5500 |
Oracle Enterprise Manager Express 的端口 |
--name oracle19c_wh |
容器名称 |
-e ORACLE_SID=ORCLCDB |
设置 CDB 的实例名(默认是 ORCLCDB) |
-e ORACLE_PDB=ORCLPDB1 |
设置 PDB 的名称(默认也是这个) |
-e ORACLE_PWD=Oracle123 |
设置 SYS、SYSTEM、PDBADMIN 的初始密码 |
-v oracle19c_data_wh:/opt/oracle |
持久化 Oracle 数据 |
--shm-size=2g |
共享内存大小,Oracle 建议 >= 1G,2G较安全 |
| 镜像 | registry.cn-hangzhou.aliyuncs.com/laowu/oracle:19c |
说明,安装容器的命令,我用的是第一个,后面需要自己设置一下密码,我的映射端口是1525,因为我别的端口被占了,这个自己改一下,数据卷的名字可以自己改
默认安装的 数据库名(CDB) 和 可插拔数据库(PDB),连接 PDB 用 ORCLPDB1,连接 CDB 用 ORCLCDB,推荐用ORCLPDB1


安装完以后,看日志:
docker logs -f oracle19c_wh
看到这个日志,代表完成,速度贼慢,注意,安装过程中不可以中断,中断就得重新来
DATABASE IS READY TO USE!
最好用终端一直打着日志,因为到最后,其实已经安装完了,但我的docker出现了卡死的情况,在docker中无法查看日志(空的),日志中出现安装完成后,就可以重启容器了,否则不要轻易重启
重启容器之后,日志才会显示
连接进去
sqlplus sys/Oracle123@localhost:1521/ORCLPDB1 as sysdba
碰到的问题
如果连接进去成功,这一小节不用看,如果失败了,这里记载了失败的一些问题和解决方案
从docker进入oracle用户
docker exec -it oracle19c_wh bash

sqlplus / as sysdba
这一步我报错了

当前 环境变量未正确设置,也就是说 oracle 用户的环境没有加载好。
echo 'export ORACLE_SID=ORCLCDB' >> ~/.bashrc
echo 'export ORACLE_HOME=/opt/oracle/product/19c/dbhome_1' >> ~/.bashrc
echo 'export PATH=$ORACLE_HOME/bin:$PATH' >> ~/.bashrcsource ~/.bashrc
然后执行sqlplus / as sysdba,这个成功了,但是用
sqlplus sys/Oracle123@localhost:1521/ORCLPDB1 as sysdba连接失败。

设置一下密码
sqlplus / as sysdba进去,设置密码
ALTER USER sys IDENTIFIED BY Oracle123;
Oracle 默认不允许通过网络连接以 SYSDBA 身份登录,除非设置了以下参数:
ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE SCOPE=SPFILE;
然后重启数据库(如果你还没设置过这项):
shutdown immediate;
startup;

确认监听器是否配置了 ORCLPDB1 服务
SHOW pdbs;
确认 PDB 名字(应该是 ORCLPDB1)是否已打开:
SELECT name, open_mode FROM v$pdbs;
如果是 MOUNTED 状态,需要打开:
ALTER PLUGGABLE DATABASE ORCLPDB1 OPEN;
这两部分我的都是对的,没改
登录
sqlplus sys/Oracle123@localhost:1521/ORCLPDB1 as sysdba

总结一下:
服务名:ORCLPDB1
用户名:sys
密码:Oracle123

创建用户
接下来老一套,创建用户,赋权,修改密码不过期
create user lzs identified by lzs;
grant connect,resource to lzs;
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
修改表空间
看下创建的用户在哪个表空间下
SELECT username, default_tablespace
FROM dba_users
WHERE username = 'LZS';

这就比较好,xe的默认是在system下,头疼,看下路径
SELECT * FROM dba_data_files

ALTER TABLESPACE USERS ADD DATAFILE '/opt/oracle/oradata/ORCLCDB/ORCLPDB1/users02.dbf' SIZE 500M AUTOEXTEND ON NEXT 100M MAXSIZE 20G;
OK啦,最大扩展20个G,应该还可以再扩大,比XE好一些,XE最多只能10G,再大就报错了
默认插入lzs用户会报错
cx_Oracle.DatabaseError: ORA-01950: no privileges on tablespace 'USERS'
这是因为没有权限插入users表空间,做一下赋权
ALTER USER LZS QUOTA UNLIMITED ON USERS;
安装mysql
-
下载mysql镜像
打开终端,终端输入
docker pull mysql:latest

来拉取镜像,等下载好了以后,输入
docker images
来查看镜像,可以看到刚下载的镜像

-
创建容器,运行mysql
docker run --name mysql -p 3306:3306 -v /d/db/mysql/conf://etc/mysql -v /d/db/mysql/logs://var/log/mysql -v /d/db/mysql/data://var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql
–name:容器名,此处命名为mysql
-e:配置信息,此处配置mysql的root用户的登陆密码
-p:端口映射,此处映射 主机3306端口 到 容器的3306端口
-d:后台运行容器,保证在退出终端后容器继续运行
-v:用于做映射,将mysql的数据映射到准备的文件夹,注意:
- 虽然是windows,但不可 用D:\这种有冒号的
- 不可以用\,要用/,
- /var不行,需要//var,因为/var会找windows的目录,但这里需要挂在的是docker内部目录
-
来查看容器的运行情况

输入docker ps

复制id,我这里是08e1361b0db8,
输入
docker exec -it 08e1361b0db8 bash
这将打开 Bash 终端,并把你放在正在运行的 MySQL 容器中。在容器中,您可以执行各种 MySQL 命令,包括创建用户、授权和配置等
-
调试mysql
接下来,我们需要登录 MySQL 并进行一些配置。使用以下命令打开 MySQL:
mysql -u root -p
输入密码,密码是创建容器的命令中的密码
注意,这里别用git bash写,要用cmd写

-
创建一个用户,并授权
然后输入您之前设置的密码。登录成功后,我们需要创建一个新用户,并授予该用户适当的权限。使用以下命令创建名为 `remote_user` 的新用户:
CREATE USER 'lzs_mysql'@'%' IDENTIFIED BY 'your_password';
其中,`remote_user` 是您自己设置的用户名,`your_password` 是该用户的密码。`%` 是通配符,表示任何 IP 地址都可以连接到 MySQL 服务器。接下来,使用以下命令为该用户授予适当的权限
GRANT ALL ON *.* TO 'lzs_mysql'@'%';
此命令授予 `remote_user` 用户对 MySQL 服务器上所有数据库和表的完全访问权限。
-
测试数据库
此部分参考mac的 安装 mysql(在上面),这是配置,注意,在windows(我的是windows 7)中,是使用virtual box虚拟机做的docker,数据库是在这里面,所以服务器地址不能是本机,是虚拟机的ip,否则会连接不上

-
创建表测试
CREATE TABLE student (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
age INT UNSIGNED NOT NULL
);
INSERT INTO student(name,age) values('zhangsan',20)
select * from student ;

参考
Mac如何安装Oracle?Mac如何配置Docker?手把手教你配置Docker并配置Oracle_oracle mac-CSDN博客
更多推荐




所有评论(0)