关系数据库-10-[mysql5和mysql8]在windows中安装为服务并共存

文章目录

  • [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) & 解决多实例可能发生的冲突问题

参考关系数据库-4-[mysql5]在windows中的安装和卸载

参考使用Python操作MySQL数据库:插入和更新数据

相关推荐
太空1号3 小时前
VxWorks入门小白菜鸟教程3 —— 编译运行VxWorksSDK示例hello_cmake_rtp(Windows篇)
windows·嵌入式硬件
天朝八阿哥4 小时前
Bye~~ win10!
linux·windows
景彡先生4 小时前
Python列表(List)完全指南:从入门到实战优化
windows·python·list
啊森要自信4 小时前
【MySQL 数据库】MySQL用户管理
android·c语言·开发语言·数据库·mysql
Liu1bo5 小时前
【MySQL】表的约束
linux·数据库·mysql
胖胖的战士5 小时前
Mysql 数据库迁移
数据库·mysql
星光一影5 小时前
大型酒店管理系统源码(多酒店版)
mysql·php
czhc11400756636 小时前
LINUX1012 mysql GLIBC安装
数据库·mysql
小草儿7996 小时前
gbase8s之.net8连接8s之mysql模式(windows)demo
windows·mysql·.net