如何在 Windows 上安装多个 MySQL,实现 MySQL 跨电脑移植使用

如何在 Windows 上安装多个 MySQL,实现 MySQL 跨电脑移植使用

MySQL 的各种其它安装方法:

  实现了在 Windows 上安装多个 MySQL、MySQL 跨电脑移植使用的标准是,如果在一个 Windows 上安装了一个 MySQL,然后将此 MySQL 数据拷贝到第二台没有安装过 MySQL 的 Windows 上,第二台 Windows 可以无附加条件地通过一定的方法来访问此 MySQL 数据库,且数据库中的数据没有损失。达到了上述的标准就认为实现了 MySQL 的跨电脑移植使用。

  MySQL 可以实现这样的技术。具体来说,如果可以将一台 Windows 上的数据库拷贝到第二台电脑上,第二台电脑只需要重新注册 MySQL 服务和修改配置文件中关于 MySQL 的安装与数据路径即可使用原先的数据。


【实现原理】

  从本质上来说,MySQL 不需要安装,只是需要在操作系统中注册 MySQL 服务。原因是,MySQL 的服务模块和其它应用的一样,是一种在后台无限循环静默运行的程序。它作为守护进程,必须要事先由操作系统将其启动,其它 MySQL 组件才能得以运行。只要它启动之后,其它使用 MySQL 的进程就可以自行启动 MySQL 客户进程来实现对 MySQL 数据库的访问。


初次安装

笔者的环境:

  • MySQL 8.0.27

  • Windows 10 教育版

具体步骤如下:

  1. 先在一台电脑使用 MySQL 的免安装包安装 MySQL,这个过程同上面的教程【在 Windows 中使用免安装包安装 MySQL】类似。为了避免不必要的踩坑,这里还是重新描述一下。

  2. 假设已经按照教程【在 Windows 中使用免安装包安装 MySQL】中的指示下载好了 MySQL 的免安装包。这里以 MySQL 8.0.27 例。

  3. 如果是同一台电脑上安装多个 MySQL,那么是不能设置环境变量的,这会导致冲突,而且也没有必要,因为可以通过完整的绝对路径来运行 MySQL。

  4. 将下载好的 mysql-8.0.27-winx64.zip 解压缩,得到 MySQL 安装目录。安装目录应该是一种含文件夹 bin 的目录。在笔者的 Windows,各路径如下:

    • MySQL 安装目录:D:\mysql-8.0.27-winx64

    • MySQL 命令目录:D:\mysql-8.0.27-winx64\bin

    • MySQL 数据库数据存放目录:D:\mysql-8.0.27-winx64\data

    • MySQL 端口号:3306

  5. 在 MySQL 的目录下创建一个 MySQL 配置文件 my.ini。此配置文件是用来规定 MySQL 服务进程的参数信息。

    [mysql]
    # 设置 MySQL 客户端默认字符集
    default-character-set=utf8 
    
    [mysqld]
    #设置 MySQL 端口号
    port = 3306 
    #skip-grant-tables
    # 设置 MySQL 的安装目录
    basedir=D:\mysql-8.0.27-winx64\
    # 设置 MySQL 数据库的数据的存放目录
    datadir=D:\mysql-8.0.27-winx64\data
    # 允许最大连接数
    max_connections=200
    # 服务端使用的字符集
    character-set-server=utf8
    # 创建新表时将使用的默认存储引擎
    default-storage-engine=INNODB
    
    [client]
    #default_character_set=utf8
    

    【踩坑提醒】

      此处 basedirdatadir 的路径中不要使用中文,而且应该使用斜杠 / 来代替反斜杠 \。原因是反斜杠 \ 可能引发转义的问题。比方说,如果路径中含 \test,那么 MySQL 会首先将 \t 解释成制表符。因此,也可以在原来的每个反斜杠 \ 后面再加一个反斜杠 \,这样也能解决转义的问题。

      如果引发了转义的问题,将出现如下报错:

    mysqld: Can't create/write to file 'XXX' (OS errno 2 - No such file or directory)
    

  6. 一般来说,只需要修改上面配置文件 my.ini 中的端口 port、MySQL 安装目录 basedir、MySQL 数据存放路径 datadir

  7. 管理员身份运行 CMD。如果不以管理员身份运行,将会有报错 Install/Remove of the Service Denied!

  8. 以管理员身份运行 CMD 的方法有很多,这里只举一例。

    1. 使用如下命令找到 CMD 的路径,然后右键单击,选择 以管理员身份运行。通常,CMD 的路径位于 C:\Windows\System32\cmd.exe

      where cmd

      D:\>where cmd
      C:\Windows\System32\cmd.exe
      
      D:\>
      
    2. 现在,如果成功启动了 CMD 窗口,窗口上应该有 管理员 字样,窗口显示的当前路径为 C:\Windows\system32

    3. 使用如下命令进入 MySQL 所在的磁盘。

      d:

      C:\Windows\system32>d:
      
      D:\>
      
    4. 使用如下命令进入 MySQL 安装路径。

      cd mysql-8.0.27-winx64\bin

      D:\>cd mysql-8.0.27-winx64\bin
      
      D:\mysql-8.0.27-winx64\bin>
      
  9. 现在,应该就在 CMD 中以管理员身份进入到了 MySQL 的命令目录。输入命令 mysqld install xxx 在操作系统中注册 MySQL 服务,其中,xxx 可以任意取名。

    mysqld install mysql01

    D:\mysql-8.0.27-winx64\bin>mysqld install mysql01
    Service successfully installed.
    
    D:\mysql-8.0.27-winx64\bin>
    
  10. 此时,应该可以在 Windows 中看到刚刚注册的 MySQL 服务。

    在这里插入图片描述

    在这里插入图片描述

  11. 上面的配置文件编辑完成之后。使用如下命令初始化 MySQL 目录。

    mysqld --initialize

    D:\mysql-8.0.27-winx64\bin>mysqld --initialize
    
    D:\mysql-8.0.27-winx64\bin>
    
  12. 使用命令 net start xxx 启动 MySQL 服务。其中,xxx 是前面起的 MySQL 服务名。

    net start mysql01

    D:\mysql-8.0.27-winx64\bin>net start mysql01
    mysql01 服务正在启动 .
    mysql01 服务已经启动成功。
    
    
    D:\mysql-8.0.27-winx64\bin>
    

    【踩坑提醒】

      如果此处出现 服务无法启动 的情况,请检查:

    • 前面配置文件中的 MySQL 安装目录设置的是否正确

    • 前面配置文件中的 MySQL 数据库数据存放目录设置的是否正确

    • 前面配置文件中设置的端口号是否已被占用


  13. 使用命令 mysql -u root -p -Pxxx 进入 MySQL 数据库。其中,xxx 是前面在配置文件中设置的端口号。

    mysql -u root -p -P3306

  14. 此处将会提示输入密码。这个密码是由前面执行命令 mysqld --initialize 时生成的,它在前面设置的 数据库数据存放目录 中的文件 计算机名.err 中。具体方法是用记事本打开该文件,找到带 password 的一行 A temporary password is generated for root@localhost:。此文字后面的就是生成的随机密码(此密码不带空格)。输入密码后即可进入数据库。

    D:\mysql-8.0.27-winx64\bin>mysql -u root -p -P3306
    Enter password: ******
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 8
    Server version: 8.0.27 MySQL Community Server - GPL
    
    Copyright (c) 2000, 2021, Oracle and/or its affiliates.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql>
    

    【踩坑提醒】

      如果上面的命令省略参数 -Pxxx,则相当于提供的是 MySQL 默认端口号 3306。如果这与前面的配置文件中设置的不一致,这将引发如下报错:

    ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost:3306' (10061)
    

  15. 初次登录之后需要修改密码。修改密码的命令为:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';。其中,新密码 要被换成自己设置的密码,且 新密码 要位于单引号之中。

    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'helloworld';

    mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'helloworld';
    Query OK, 0 rows affected (0.02 sec)
    
    mysql>
    

    【踩坑提醒】

      在 MySQL 5.7 及以前的版本,修改密码的命令是 set password for root@localhost =password(‘新密码’);。如果在 MySQL 8.0 中使用该命令,会发生如下报错:

    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'password(‘helloworld’)' at line 1
    

  16. MySQL 登录成功后,就可以使用 MySQL 语言来对数据库进入控制了。

  17. 在使用完数据库后,就可以考虑退出了。退出 MySQL 的方法是,先使用命令 exit 来退出登录。

    exit

    mysql> exit
    Bye
    
    D:\mysql-8.0.27-winx64\bin>
    
  18. 使用命令 net stop xxx 退出 MySQL 服务。其中,xxx 是前面起的 MySQL 服务名。

    net stop mysql01

    D:\mysql-8.0.27-winx64\bin>net stop mysql01
    mysql01 服务正在停止.
    mysql01 服务已成功停止。
    
    
    D:\mysql-8.0.27-winx64\bin>
    

    【提示】

      如果读者非常爱干净,可以在此处将前面注册的 MySQL 服务也一并移除。使用命令 sc delete xxx 即可。其中,xxx 是前面起的 MySQL 服务名。

    sc delete xxx

    D:\mysql-8.0.27-winx64\bin>sc delete mysql01
    [SC] DeleteService 成功
    
    D:\mysql-8.0.27-winx64\bin>
    

      但是,这样做了之后,下次再登录时,需要额外先执行前面的命令 mysqld install xxx 再次安装 MySQL 服务。(此时只需要注册 MySQL 服务,不需要执行 MySQL 初始化。)


  19. 退出之后,如果需要再次登录,只需要从前面的命令 net start xxx 开始进行即可。示例如下:

    D:\mysql-8.0.27-winx64\bin>net start mysql01
    mysql01 服务正在启动 .
    mysql01 服务已经启动成功。
    
    
    D:\mysql-8.0.27-winx64\bin>mysql -u root -p -P3306
    Enter password: ******
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 8
    Server version: 8.0.27 MySQL Community Server - GPL
    
    Copyright (c) 2000, 2021, Oracle and/or its affiliates.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql>
    

MySQL 移植使用

  1. 下面来进行数据库移植。可以选择先在原数据库中创建一些初始数据,以供移植后验证移植成功。这里假设已经完成了这个步骤。下面开始创建另一个 MySQL 服务。这个过程可以在前面那台电脑上进行,也可以在另一台电脑上进行。笔者已经分别进行了验证,均已成功。

  2. 将原电脑的 MySQL 安装目录拷贝到另一个任意目录,这里以 E:\ 为例。在新 MySQL 服务中,各目录如下

    • MySQL 安装目录:E:\mysql-8.0.27-winx64
    • MySQL 命令目录:E:\mysql-8.0.27-winx64\bin
    • MySQL 数据库数据存放目录:E:\mysql-8.0.27-winx64\data
    • MySQL 端口号:3402

    【提示】

      准确地说,拷贝的时候只需要拷贝 MySQL 数据库数据存放目录 中的文件,而且在拷贝之后,登录数据库的密码应该是原数据库的密码。


  3. 对目录下的配置文件 my.ini 中的 MySQL 安装目录 basedir、MySQL 数据存放路径 datadir 作相应的修改。配置文件 my.ini 中的端口 port 要改成另一个不会与已有冲突的端口号。


    【踩坑提醒】

      很多人可能想着将 MySQL 数据库数据存放目录 设置成相对目录,这样将 MySQL 安装目录整个进行拷贝移动时也不需要修改配置文件。但实际上,这行不通。配置文件 my.ini 中记载的目录不能是相对路径。

      不过,这不是没有应对的办法,可以在 MySQL 启动前,使用一种脚本代码来将配置文件 my.ini 中的绝对路径设置成正确的值。很多编程语言都可以实现这一点。


  4. 使用管理员身份运行 CMD,并进入 MySQL 命令目录。这里是: E:\mysql-8.0.27-winx64\bin

  5. 输入命令 mysqld install xxx 在操作系统中注册 MySQL 服务,其中,xxx 可以任意取名。

    mysqld install mysql02

    E:\mysql-8.0.27-winx64\bin>mysqld install mysql02
    Service successfully installed.
    
    E:\mysql-8.0.27-winx64\bin>
    

    【注意】

      此处不需要再使用命令 mysqld --initialize 来初始化 MySQL 目录,因为已经有了移植之后的数据了。


  6. 使用命令 net start xxx 启动 MySQL 服务。其中,xxx 是前面起的 MySQL 服务名。

    net start mysql02

    E:\mysql-8.0.27-winx64\bin>net start mysql02
    mysql02 服务正在启动 ...
    mysql02 服务已经启动成功。
    
    
    E:\mysql-8.0.27-winx64\bin>
    
  7. 使用命令 mysql -u root -p -Pxxx 进入 MySQL 数据库。其中,xxx 是前面在配置文件中设置的端口号。此处应该会提示输入密码。如果移植是成功的,此密码应该是移植前自设的密码。

    mysql -u root -p -P3402

    E:\mysql-8.0.27-winx64\bin>mysql -u root -p -P3402
    Enter password: ******
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 8
    Server version: 8.0.27 MySQL Community Server - GPL
    
    Copyright (c) 2000, 2021, Oracle and/or its affiliates.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql>
    
  8. 到这一步,就完成了 在 Windows 上安装多个 MySQL,实现 MySQL 跨电脑移植使用 的全部步骤。读者可以自行试一下,由于使用了不同的端口号,即便是在同一台电脑上运行这两个 MySQL 也不会也冲突,而且移植之后的数据依旧可以访问。

  9. 可以看出,在创建第二个 MySQL 服务时,只使用了一些 CMD 命令。只要将这些命令提前写入任意的一种脚本语言中,就可以无障碍地实现对移植之后数据库的访问。欢呼吧,少年!

附录

其它 MySQL 命令

查看本 MySQL 数据存放目录

  这需要先登录所需要查询的 MySQL 客户端才行。如果已经登录,输入如下命令即可:

show global variables like "%datadir%";

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值