ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

sheng的学习笔记-docker部署数据库oracle,mysql,支持windows和mac

sheng的学习笔记-docker部署数据库oracle,mysql,支持windows和mac 部署目录sheng的学习笔记-部署-目录-CSDN博客docker基础知识可参考 sheng的学习笔记-docker部署原理图命令用idea设置docker目录装完ORACLE之后的统一操作修改密码期限修改数据空间docker安装数据库mac版本安装oracle xe 11g版本下载oracle镜像创建容器运行Oracle来查看容器的运行情况调试Oralce默认的管理员用户名 sys 密码 oracle 作为dba登录创建一个用户并授权测试数据库创建表测试安装oracle 19c 版本安装mysql下载mysql镜像创建容器运行mysql来查看容器的运行情况调试mysql创建一个用户并授权测试数据库创建表测试windows前置设置改造可选数据库的数据量很大必看我踩坑了安装oracle xe 11g版本下载oracle镜像创建容器运行Oracle来查看容器的运行情况调试Oralce创建一个用户并授权测试数据库创建表测试安装oracle19c 版本下载镜像创建个数据卷安装容器连接进去碰到的问题设置一下密码登录创建用户修改表空间设置自动启动安装mysql下载mysql镜像创建容器运行mysql来查看容器的运行情况调试mysql创建一个用户并授权测试数据库创建表测试参考引导顺序1先看docker安装数据库系列支持win的oracle和mysql,macbook的oracle和mysql2如果是win的oracle看下装完ORACLE之后的统一操作这部分如果只是玩玩无所谓但我的数据超过20GC盘顶不住了并且出现了密码过期数据超过默认数据库限制下面都有解决方案装完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 profileDEFAULT and resource_namePASSWORD_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-11gdocker exec -it c0f22826d5d2 /bin/bashsqlplus system/oraclecreate 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 xe 11g版本下载oracle镜像打开终端输入docker search oracle​我这里下载的是 oracle-xe-11g,在终端中输入sudo docker pull deepdiver/docker-oracle-xe-11g来拉取镜像等下载好了以后输入docker images来查看镜像可以看到刚下载的镜像​创建容器运行Oraclesudo 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来查看镜像可以看到刚下载的镜像创建容器运行mysqldocker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORDroot -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 并进行一些配置。使用以下命令打开 MySQLmysql -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-dirD:\docker\app --wsl-default-data-rootD:\docker\data --windows-containers-default-data-rootD:\\dockerwin11安装的Docker 坎 - 知乎 参考这个文章如果已经安装了用下面的方式改一下位置用管理员权限打开docker desktop软件在这里将位置迁移到d盘browse选的是d:盘软件默认的自己加上DockerDesktop文件夹最好是空的docker就迁移不然各种报错如果要做数据迁移一定要做数据备份这个位置加一下d盘设置安装oracle xe 11g版本下载oracle镜像打开终端输入docker search oracle​我这里下载的是 oracle-xe-11g,在终端中输入docker pull deepdiver/docker-oracle-xe-11g来拉取镜像等下载好了以后输入docker images来查看镜像可以看到刚下载的镜像​创建容器运行Oracledocker 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_SIDORCLCDB -e ORACLE_PDBORCLPDB1 -e ORACLE_PWDOracle123 -v oracle19c_data_wh:/opt/oracle --shm-size2g registry.cn-hangzhou.aliyuncs.com/laowu/oracle:19c-p 1525:1521将宿主机 1525 端口映射到容器内 Oracle 监听端口 1521-p 5500:5500Oracle Enterprise Manager Express 的端口--name oracle19c_wh容器名称-e ORACLE_SIDORCLCDB设置 CDB 的实例名默认是 ORCLCDB-e ORACLE_PDBORCLPDB1设置 PDB 的名称默认也是这个-e ORACLE_PWDOracle123设置 SYS、SYSTEM、PDBADMIN 的初始密码-v oracle19c_data_wh:/opt/oracle持久化 Oracle 数据--shm-size2g共享内存大小Oracle 建议 1G2G较安全镜像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/Oracle123localhost:1521/ORCLPDB1 as sysdba碰到的问题如果连接进去成功这一小节不用看如果失败了这里记载了失败的一些问题和解决方案从docker进入oracle用户docker exec -it oracle19c_wh bashsqlplus / as sysdba这一步我报错了当前环境变量未正确设置也就是说oracle 用户的环境没有加载好。echo export ORACLE_SIDORCLCDB ~/.bashrcecho export ORACLE_HOME/opt/oracle/product/19c/dbhome_1 ~/.bashrcecho export PATH$ORACLE_HOME/bin:$PATH ~/.bashrcsource ~/.bashrc然后执行sqlplus / as sysdba这个成功了但是用sqlplus sys/Oracle123localhost:1521/ORCLPDB1 as sysdba连接失败。设置一下密码sqlplus / as sysdba进去设置密码ALTER USER sys IDENTIFIED BY Oracle123;Oracle 默认不允许通过网络连接以SYSDBA身份登录除非设置了以下参数ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILEEXCLUSIVE SCOPESPFILE;然后重启数据库如果你还没设置过这项shutdown immediate;startup;确认监听器是否配置了ORCLPDB1服务SHOW pdbs;确认 PDB 名字应该是ORCLPDB1是否已打开SELECT name, open_mode FROM v$pdbs;如果是MOUNTED状态需要打开ALTER PLUGGABLE DATABASE ORCLPDB1 OPEN;这两部分我的都是对的没改登录sqlplus sys/Oracle123localhost: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_tablespaceFROM dba_usersWHERE username LZS;这就比较好xe的默认是在system下头疼看下路径SELECT * FROM dba_data_filesALTER 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;设置自动启动命令查看所有的container docker ps -a看下oracle19c的container id 7b4001c1ff54docker update --restartunless-stopped 7b4001c1ff54docker update --restart always 7b4001c1ff54在containeroracle保持启动的情况下关闭docker然后启动dockeroracle就自动启动了安装mysql下载mysql镜像打开终端终端输入docker pull mysql:latest来拉取镜像等下载好了以后输入docker images来查看镜像可以看到刚下载的镜像创建容器运行mysqldocker 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_PASSWORDroot -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 并进行一些配置。使用以下命令打开 MySQLmysql -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博客Docker 如何安装 MySQL 并实现远程连接 - 知乎windows系统使用Docker搭建MySQL服务|江阴雨辰互联
返回列表