文章目录
- [1 安装MySQL](#1 安装MySQL)
- [2 MySQL5和MySQL8共存](#2 MySQL5和MySQL8共存)
-
- [2.1 MySQL5的my.ini](#2.1 MySQL5的my.ini)
- [2.2 MySQL8的my.ini](#2.2 MySQL8的my.ini)
- [2.3 安装服务](#2.3 安装服务)
- [2.4 查看服务](#2.4 查看服务)
- [3 Python操作MySQL数据库](#3 Python操作MySQL数据库)
-
- [3.1 修改某个字段的值转为insert语句](#3.1 修改某个字段的值转为insert语句)
- [3.2 修改某个字段的值转为update语句](#3.2 修改某个字段的值转为update语句)
- [4 参考附录](#4 参考附录)
使用不同的端口(Port)、不同的服务名称(Service Name)、不同的数据目录(datadir)和配置文件,将MySQL5和MySQL8同时安装在windows中。
1 安装MySQL
以解压缩版mysql-5.7.35-winx64.zip为例
(1)解压下载好的压缩包放到你想要放的目录D:\mysql-5.7.35-winx64。
(2)用管理员打开CMD,切换到MySql的解压目录下的bin目录。
(3)初始化数据库,并记录随机生成的密码。
CMD>mysqld --initialize --console
(4)将mysql安装为Windows的服务
CMD>mysqld -install
(5)启动mysql服务
CMD>net start mysql
(6)登陆数据库,并输入前面记录的临时密码
CMD>mysql -u root -p
(7)修改root密码并提交注意首次必须是localhost
mysql>alter user 'root'@'localhost' identified by 'bigdata';
mysql>commit;
mysql>quit;
(8)将Mysql的bin目录配置到环境变量中。
路径D:\mysql-5.7.35-winx64\bin
2 MySQL5和MySQL8共存
MySQL 5和MySQL 8可以完美共存于同一台Windows机器上,互不影响。
1、使用不同的端口(Port)。
2、使用不同的服务名称(Service Name)。
3、使用不同的数据目录(datadir)和配置文件。
内存占用:两个实例会占用更多内存,确保系统资源充足。
(1)修改环境变量,无论使用哪个版本的mysql命令,都可以在命令行连接。
mysql -uroot -pbigdata -P3306
mysql -uroot -pbigdata -P3307
(2)配置my.ini
(3)以管理员身份打开cmd
(4)创建windows服务mysqld -install mysql5
2.1 MySQL5的my.ini
[mysqld]
#设置3307端口
port=3307
#设置mysql的安装目录
basedir=D:\mysql-5.7.44-winx64
#设置mysql数据库的数据的存放目录
datadir=D:\mysql-5.7.44-winx64\data
#允许最大连接数
max_connections=200
#允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
#服务端使用的字符集默认为UTF8
character-set-server=utf8
#创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
[mysql]
#设置mysql客户端默认字符集
default-character-set=utf8
[client]
#设置mysql客户端连接服务端时默认使用的端口
port=3307
default-character-set=utf8
2.2 MySQL8的my.ini
[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir=D:\\mysql-8.0.19-winx64
# 设置mysql数据库的数据的存放目录
datadir=D:\\mysql-8.0.19-winx64\\data
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
# 服务端使用的字符集默认为UTF8
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8
2.3 安装服务
分别进入MYSQL5和MySQL8的安装目录bin,以管理员身份运行CMD。
# 安装MySQL 5为服务
.\mysqld --install MySQL5
# 安装MySQL 8为服务(使用不同服务名)
.\mysqld --install MySQL8

自动记录可执行文件的路径。
2.4 查看服务
只要配置得当,MySQL 5和MySQL 8可以完美共存于同一台 Windows 机器上,互不影响。
右键此电脑->管理->服务和应用程序->服务,然后就可以找到安装的MySQL5和MySQL8两个服务,根据需要启动其中一个或者同时启动多个服务。
3 Python操作MySQL数据库
最后不要忘记提交事务。
3.1 修改某个字段的值转为insert语句
import pymysql
import datetime
# (1)数据库信息
class config(object):
HOST = "localhost"
PORT = 3307
USERNAME = "root"
PASSWORD = "bigdata"
DBNAME = "testdb"
# 创建连接
con = pymysql.Connect(host=config.HOST,
port=config.PORT,
user=config.USERNAME,
passwd=config.PASSWORD,
db=config.DBNAME)
# 使用cursor()方法创建一个游标对象cursor
cur = con.cursor()
table_list = ["test10"]
for table_name in table_list:
# (1)查询并处理字段名
cur.execute(f"SHOW FULL COLUMNS FROM {table_name}")
columns = cur.fetchall()
name_str = ""
for column in columns:
column_name = column[0] # 字段名
name_str += f"`{column_name}`, "
name_str = "("+name_str[:-2]+")"
# (2)构造查询数据语句
sql_query = f"select * from test00"
# (3)查询数据
cur.execute(sql_query)
results = cur.fetchall()
# (4)构造insert语句
j = 0
for res in results:
j = j+1
values_list = []
# 将索引从1开始
for i,value in enumerate(res,1):
# 修改某一个字段的内容
if i == 1:
value = value+"bc"
if i == 2:
value = value.replace("sdasd", "").replace("特殊","")
if i == 3:
value = f"bc_alg_{str(j).zfill(3)}"
if isinstance(value, str): # 字符串
values_list.append(f"'{str(value)}'")
elif value is None: # 空值
values_list.append('NULL')
elif isinstance(value, datetime.datetime): # 时间戳
values_list.append(f"'{str(value.strftime('%Y-%m-%d %H:%M:%S.%f'))[:-3]}'")
else:
values_list.append(str(value))
# 使用逗号连接列表中的所有元素,得到最终的分隔字符串
values_str = ', '.join(values_list)
insert_sql = f"INSERT INTO `testdb`.`{table_name}` {name_str} VALUES ({values_str});"
print(insert_sql)
# 关闭不使用的游标对象
cur.close()
# 关闭数据库连接
con.close()
3.2 修改某个字段的值转为update语句
import pymysql
import datetime
# (1)数据库信息
class config(object):
HOST = "localhost"
PORT = 3307
USERNAME = "root"
PASSWORD = "bigdata"
DBNAME = "testdb"
# 创建连接
con = pymysql.Connect(host=config.HOST,
port=config.PORT,
user=config.USERNAME,
passwd=config.PASSWORD,
db=config.DBNAME)
# 使用cursor()方法创建一个游标对象cursor
cur = con.cursor()
table_list = ["test10"]
for table_name in table_list:
# (1)查询并处理字段名
cur.execute(f"SHOW FULL COLUMNS FROM {table_name}")
columns = cur.fetchall()
# (2)构造查询数据语句
sql_query = f"select * from {table_name}"
# (3)查询数据
cur.execute(sql_query)
results = cur.fetchall()
# (4) 构造update语句
for re in results: # 遍历每一条记录
tmp = ""
tmp_id = ""
for i in range(len(columns)): # 每条记录都有相同的字段
column = columns[i]
column_name = column[0] # 字段名
value = re[i] # 字段值
if isinstance(value, str): # 字符串
value = f"'{str(value)}'"
elif value is None: # 空值
value ='NULL'
elif isinstance(value, datetime.datetime): # 时间戳
value = f"'{str(value.strftime('%Y-%m-%d %H:%M:%S.%f'))[:-3]}'"
else:
value = str(value)
if column_name == "id":
tmp_id = f" WHERE `{column_name}` = {value};"
else:
tmp += f"`{column_name}` = {value},"
update_sql = f"UPDATE `testdb`.`{table_name}` SET " +tmp[:-1] + tmp_id
print(update_sql)
# 关闭不使用的游标对象
cur.close()
# 关闭数据库连接
con.close()
4 参考附录
参考windows如何同时安装两个不同版本的Mysql(Mysql8.0+Mysql5.7) & 解决多实例可能发生的冲突问题