一.docker在线安装mysql
(一)windows安装docker
- 安装启用
- Docker Desktop Installer.exe(572M) 安装后自动配置env 安装后有多目录
C:\Program Files\Docker\Docker\resources\bin 自动配置环境变量
C:\Users\Administrator\AppData\Local\Docker\wsl\data\ext4.vhdx 容器存放
C:\Users\Administrator.docker - 运行C:\Program Files\Docker\Docker\Docker Desktop.exe ( 启动程序)
- docker镜像registry可能不能注册与打开 使用国内镜像源
国内镜像源的两种方法
官网
runoob
-
启动Docker Desktop.exe 任意处CMD运行
docker images
docker ps -a
docker rm/rmi 容器名称/静像名称(全部删除)
docker pull mysql (mysql:latest)
docker images ; docker ps -a;docker run -d -p 3307:3306 --name mysql-3307 -e MYSQL_ROOT_PASSWORD=123456 mysql:latest ;
docker exec -it mysql-3307 env LANG=C.UTF-8 /bin/bash ; mysql -uroot -p123456
(二)安装后python测试
pymysql-01
import pymysql #若报错需装 pip install cryptography #mysqlClient
conn = pymysql.connect(host="localhost",
port=3307,
charset="utf8",
user="root",
password="123456"
)
if hasattr(conn, "cursor"):
cursor = getattr(conn, "cursor")() # cursor=conn.cursor()
print("【0】显示当前所有数据库:", cursor.execute("show databases;"),cursor.fetchall())
print("【0】删除数据库studentDB:",cursor.execute(" drop database if exists studentDB; "))
print("【2】显示所有数据库:", cursor.execute("show databases;"),cursor.fetchall())
print("【3】重新创库:",cursor.execute(" create database if not exists studentDB character set utf8;"))
print("【4】使用当前数据库:",cursor.execute("use studentDB;"))
print("【5】新增后的所有数据库:", cursor.execute("show databases;"))
for i,db in enumerate(cursor.fetchall()):
print("\t",i+1,db)
print("【6】游标已取完无数据:",cursor.fetchall())
cursor.close()
conn.close()
# Python311\Lib\site-packages\pymysql
mysql-connector-python
import mysql.connector # pycharm 上述安装不是mysql模块 #mysqlClient
# pycharm 右键提示安装模块为 mysql-connector-python
conn = mysql.connector.connect(host="localhost",port=3307,user="root",
password="123456",database="studentDB") ## 连接数据库
cursor = conn.cursor()# 创建游标
# 创建表格
sql="CREATE TABLE IF NOT EXISTS users (id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(255), age INT)"
cursor.execute(sql)
# 插入数据
cursor.execute("INSERT INTO users (name, age) VALUES ('美国Alice', 25)")
cursor.execute("INSERT INTO users (name, age) VALUES ('Bob', 30)")
conn.commit() #如果未提交 则数据库不能持久化生成数据 属于数据库的 瞬时态?
# 查询数据
cursor.execute("SELECT id, name, age FROM users;")
for row in cursor.fetchall():
print(f"ID: {row[0]}, Name: {row[1]}, Age: {row[2]}")
# 关闭游标和连接
cursor.close()
conn.close()
# 模块安装位置 ..\Python311\Lib\site-packages\mysql_connector_python-8.1.0.dist-info
# docker exec -it mysql-3307 env LANG=C.UTF-8 /bin/bash (解决中文不能输入问题)
# use studentDB; show tables; select * from users;
pymysql-02
import pymysql #若报错 需要安装 pip install cryptography
dbConfig={
"host":"localhost","port":3307,"charset":"utf8",
"user":"root","password":"123456","database":"studentDB"
}
conn = pymysql.connect(**dbConfig) # 观察**符号用法
print(conn)
cursor=conn.cursor()
cursor.execute("show databases;")
print(cursor.fetchall())
cursor.execute("SELECT id, name, age FROM users")
for row in cursor.fetchall():
print(f"ID: {row[0]}, Name: {row[1]}, Age: {row[2]}")
# 关闭游标和连接
cursor.close()
conn.close()
二.windows免装解压缩版
李兴华
https://www.mysql.com
https://dev.mysql.com/downloads/ 安装版mysql-installer-community-8.0.35.0.msi 约300M
https://dev.mysql.com/downloads/mysql/ 解压缩 MySQLCommunityServer8.2.0Innovation
- 配置文件 my.ini
# 约250M 解压缩建议放在该目录c:\mysql8 设置环境PATH添加 C:\mysql8\bin
# 数据存储位置 C:\mysql8\mysql-dc(dataCenter) \创建两个目录data logs
# 创建mysql配置文件: c:\myql8\my.ini文件如下
## 配置文件
[mysqld]
#1.设置3306端口
port=3306
#2.设置mysql的安装目录
basedir=C:\mysql8
#3.设置mysql数据库的数据的存放目录
datadir=C:\mysql8\mysql-dc\data
#4.mysqlsock存储目录
socket=C:\mysql8\mysql-dc\data\mysql.sock
#5.允许最大连接数
max_connections=10000
#6.允许连接失败次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
#7.服务端使用的字符集默认为UTF8
character-set-server=UTF8MB4
#8.创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
#9.默认使用"mysql_native_password"插件认证
default_authentication_plugin=mysql_native_password
[mysql]
#1.设置mysql客户端默认字符集
default-character-set=UTF8MB4
#2.mysqlsock存储目录
socket=C:\mysql8\mysql-dc\data\mysql.sock
[client]
port=3306
default-character-set=utf8
[mysqld_safe]
log-error=C:\mysql8\mysql-dc\logs\mysql.log
pid-file=C:\mysql8\mysql-dc\logs\mysql.pid
#mysqlsock存储目录
socket=C:\mysql8\mysql-dc\data\mysql.sock
-
数据库初使化 修改M码
C:\mysql8\mysql-dc\data (下方每次操作 检查该目录变化)
## WindowsCMD 管理员身份运行:mysql(因未初使化报错);
# 初使化命令 where cmd; mysqld --initialize --console
# 若执错 vcruntime140_1.dll丢失 安装360安全卫士安装vc++相关软件
# 初完毕 A temporary password is generated for root@localhost: 76uSiAn.2giz
# C:\WINDOWS\system32>mysqld install (Service successfully installed.)
# 启动服务 net start / stop mysql (此电脑-管理-启动 mysql 服务)
# 登录服务 mysql -uroot -p76uSiAn.2giz
# 改M 123456 或 mysqladmin
# alter user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
# exit 或 quit (已改M码 "123456")
## 设置远程(登录)服务
# mysql -uroot -p123456
# show databases; -- 自带4个内置数据库不能被删除修改
# select * from mysql.user ;(与当前操作库无关)
# select user.Host from mysql.user; (mysql库的表 user)
# select user.Host from mysql.user where user.User='root';
## use mysql
select * from user; select user,host from user;
describe user;
# update user set Host='%' where User='root' ; 1用户root或所有用户远登?
select user,host,authentication_string from user;
flush privileges; #配置立即生效
show engines; -- innodb=default-storage-engine
#拥有事务功能的最为传统的数据引擎(大部分环境下都要用此引擎)
sys cls -- 清屏命令(可以使用cmd命令)
sys dir / ipconfig ; (但docker 安装mysql不支持?)
#卸载 quit / exit ; net stop mysql ; mysql remove
三.docker+php+nginx
runoob 代码如下:
- docker + nginx
# docker pull nginx:latest
# docker run --name nginx-8080 -p 8080:80 -d nginx [URL测试]
# [http://localhost:8080/ http://localhost:8080/50x.html或者index.html ]
# docker exec -it nginx-8080 /bin/bash
cat /usr/share/nginx/html/index.html (找到默认网址)
cat /usr/share/nginx/html/50x.html ;
ls /etc/nginx/conf.d ; cat !$/default.conf ; ls /var/log/nginx
docker stop nginx-8080 ; docker rm nginx-8080 (删除测试nginx容器) ; exit
docker run -d --name nginx-8080 -p 8080:80 nginx:latest
F:\Program Files\docker\etc\nginx> docker container cp nginx-8080:/etc/nginx . (点)
#上述目录执行CMD上述命令 生成nginx\nginx\conf.d的目录及其他文件
F:\Program Files\docker\etc\nginx\ html 和 logs (需要自行创建2个目录)
F:\Program Files\docker\etc\nginx>docker container cp nginx-8080:/usr/share/nginx/html .
停止删除容器重新运行
docker run -d -p 8080:80 --name nginx-8080 -v "F:\Program Files\docker\etc\nginx\html":/usr/share/nginx/html nginx:latest
# F:\Program Files\docker\etc\nginx\html\test.htlm
# 测试成功 127.0.0.1 (localhost/本机IP地址) :8080
docker run -d -p 8080:80 --name nginx-8080 -v "F:\Program Files\docker\etc\nginx\html":/usr/share/nginx/html:ro nginx:latest
#再测试成功 readOnly
docker run -d -p 8080:80 --name nginx-8080 -v "F:\Program Files\docker\etc\nginx\logs":/var/log/nginx nginx:latest
(测试成功 若日志加上 :ro 测试却失败 )
docker run -d -p 8080:80 --name nginx-8080 -v "F:\Program Files\docker\etc\nginx\conf":/etc/nginx nginx:latest (成功 :ro再试成功)
- docker + php + nginx
docker pull php:5.6-fpm
docker run --name myphp-fpm -v "F:\Program Files\docker\etc\nginx\html":/www -d php:5.6-fpm
docker exec -it myphp-fpm /bin/bash ; cd \ ; ls ; ls www (有这个目录)
cat /etc/hosts; exit
【配置文件测试成功】
runoob-test-php.conf 文件名称改为 default.conf(原文件改为default.conf0)
docker run -d -p 8080:80 --name nginx-8080 -v "F:\Program Files\docker\etc\nginx\html":/usr/share/nginx/html:ro -v "F:\Program Files\docker\etc\nginx\logs":/var/log/nginx -v "F:\Program Files\docker\etc\nginx\conf":/etc/nginx --link myphp-fpm:php nginx:latest
-
docker + php + nginx + mysql
【注意】主机访问nginx 容器 nginx访问容器php php容器访问 mysql容器
docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql-3307
(测试所有容器的IP)
docker run -d -p 3307:3306 --name mysql-3307 -e MYSQL_ROOT_PASSWORD=123456 mysql:latest
docker exec -it mysql-3307 env LANG=C.UTF-8 /bin/bash ; mysql -uroot -p123456
【容器之间如何访问 建立容器公共网络 暂时不成功】
docker搭建PHPMySQLRedis
docker rm -f mysql-3307 (删所有容器重建)
// 进入容器 php代码可以使用 mysqli_connect函数
//<?php echo phpinfo();?> //测试localhost:8080/index.php
docker exec -it myphp-fpm /bin/bash
// 切换目录
cd /usr/local/bin
// 安装pdo_mysql扩展
./docker-php-ext-install pdo_mysql
// 安装mysqli扩展
./docker-php-ext-install mysqli
// 退出容器
exit
// 重启容器
docker restart myphp-fpm (php-container-name)