Windows中运行多个5.7版本Mysql的实例,并配置主从关系

tech2022-09-24  103

       首先去官网下载https://downloads.mysql.com/archives/community/ 合适版本的mysql包。解压到指定目录,并将包里的bin目录配置到环境变量中。

一、运行多个实例:

       1.1 在MySQL的base目录,下图我的base目录,在base目录下创建两个实例的配置文件my3307.cnf,my3308.cnf

        1.2 my3307.cnf配置文件的内容:

[mysql] # 设置mysql客户端默认字符集 default-character-set=utf8mb4 [mysqld] # 设置3307端口 port = 3307 # 设置mysql的安装目录 basedir=C:\Program\mysql-5.7.28-win64 # 设置 mysql数据库的数据的存放目录,MySQL 8+ 不需要以下配置,系统自己生成即可,否则有可能报错 datadir=C:\Program\mysql-5.7.28-win64\data3307 # 允许最大连接数 max_connections=200 # 服务端使用的字符集默认为8比特编码的latin1字符集 character-set-server=utf8mb4 # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB explicit_defaults_for_timestamp=true log-error=C:\Program\mysql-5.7.28-win64\mysql3307.err pid-file=C:\Program\mysql-5.7.28-win64\mysqld3307.pid socket =C:\Program\mysql-5.7.28-win64\mysql3307.sock

      my3308.cnf配置文件的内容

[mysql] # 设置mysql客户端默认字符集 default-character-set=utf8mb4 [mysqld] # 设置3307端口 port = 3308 # 设置mysql的安装目录 basedir=C:\Program\mysql-5.7.28-win64 # 设置 mysql数据库的数据的存放目录,MySQL 8+ 不需要以下配置,系统自己生成即可,否则有可能报错 datadir=C:\Program\mysql-5.7.28-win64\data3308 # 允许最大连接数 max_connections=200 # 服务端使用的字符集默认为8比特编码的latin1字符集 character-set-server=utf8mb4 # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB explicit_defaults_for_timestamp=true log-error=C:\Program\mysql-5.7.28-win64\mysql3308.err pid-file=C:\Program\mysql-5.7.28-win64\mysqld3308.pid socket =C:\Program\mysql-5.7.28-win64\mysql3308.sock

   其中上面的data3307和data3308可以不用手动创建

  1.3  进入到命令行,初始化实例

C:\Program\mysql-5.7.28-win64\bin>mysqld --defaults-file=C:\Program\mysql-5.7.28-win64\my3307.cnf --initialize --console --basedir=C:\Program\mysql-5.7.28-win64 --datadir=C:\Program\mysql-5.7.28-win64\data3307   C:\Program\mysql-5.7.28-win64\bin>mysqld --defaults-file=C:\Program\mysql-5.7.28-win64\my3308.cnf --initialize --console --basedir=C:\Program\mysql-5.7.28-win64 --datadir=C:\Program\mysql-5.7.28-win64\data3308

  1.3.1 在初始化每个实例的信息时会打印出实例的初始密码,如下:

   可以看到密码在最后一行,不要搞丢了,不然就连接不少数据库了, 另外上面小版本不一致,不要在意。。

1.4首先在base目录下创建my.ini 配置文件,然后为每个实例注册windows服务,开启服务

[mysqld1] # 设置3307端口 port = 3307 # 设置mysql的安装目录 basedir=C:\Program\mysql-5.7.28-win64 # 设置 mysql数据库的数据的存放目录,MySQL 8+ 不需要以下配置,系统自己生成即可,否则有可能报错 datadir=C:\Program\mysql-5.7.28-win64\data3307 # 允许最大连接数 max_connections=200 # 服务端使用的字符集默认为8比特编码的latin1字符集 character-set-server=utf8mb4 # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB explicit_defaults_for_timestamp=true log-error=C:\Program\mysql-5.7.28-win64\mysql3307.err pid-file=C:\Program\mysql-5.7.28-win64\mysqld3307.pid socket =C:\Program\mysql-5.7.28-win64\mysql3307.sock [mysqld2] # 设置3308端口 port = 3308 # 设置mysql的安装目录 basedir=C:\Program\mysql-5.7.28-win64 # 设置 mysql数据库的数据的存放目录,MySQL 8+ 不需要以下配置,系统自己生成即可,否则有可能报错 datadir=C:\Program\mysql-5.7.28-win64\data3308 # 允许最大连接数 max_connections=200 # 服务端使用的字符集默认为8比特编码的latin1字符集 character-set-server=utf8mb4 # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB explicit_defaults_for_timestamp=true log-error=C:\Program\mysql-5.7.28-win64\mysql3308.err pid-file=C:\Program\mysql-5.7.28-win64\mysqld3308.pid socket =C:\Program\mysql-5.7.28-win64\mysql3308.sock #注册服务 C:\Program\mysql-5.7.28-win64\bin>mysqld --install mysqld1 Service successfully installed. C:\Program\mysql-5.7.28-win64\bin>mysqld --install mysqld2 Service successfully installed. #开启服务 C:\Users\Administrator>net start mysqld1 C:\Users\Administrator>net start mysqld1

1.5 连接实例,并修改密码,这样创建多个实例就结束了

C:\Users\Administrator>mysql --port=3307 --host=127.0.0.1 --user=root --password=密码为之前的初始化密码 mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 6 Server version: 5.7.25 Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. 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> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456'; Query OK, 0 rows affected (0.00 sec) mysql> exit

二、为不同节点间的mysql实例配置主从关系

2.1 在my.ini中为某一节点下的实例添加master配置,master即主实例,其中server_id随机赋值的

#添加的配置如下: server-id=1#主库和从库需要不一致 log-bin=mysql-bin binlog-do-db=test#同步的数据库1 binlog-do-db=keyboard#同步的数据库2 binlog-ignore-db=mysql#不需要同步的数据库

具体如下:

2.2 重启下刚配置的Mysql实例的服务(停止、启动):

2.3 确认下刚master的配置是否生效,打开navicat Premium 连接实例,按F6 再命令列表界面输入:

show variables like ’server_id‘;

确认serverld, 是不是刚配置的serverid,如何不是连接实例,连接错了。。。

show master status,

确认下需要同步的数据库,以及不同步的数据,其中显示的file和position在从库配置中会用到,具体图例:

2.4 在主库中点菜单栏中的用户为从库创建账号,如下图所示:

      

2.4.1 并为其赋值权限:

2.4.2 测试下刚新建这个slave账号是否正常连接

2.5至此主库配置结束,从库配置依然是在另外一个节点下的myini文件中的实例末尾添加配置如下:

server-id=2#和主库不一致 replicate-do-db=test#需要同步的库1 replicate-ignore-db=test123#不需要同步的库

2.6 重启从库的服务。

2.7检查刚从库的配置是否生效,同2.3 一样,检查下server_id,为自己手动设置的。

2.8 在navicat连接实例按F6出现的命令行中配置从库,其中master_host:主库的ip,master_port:主库的端口,master_user:主库给丛库建立的账号名称,master_password:账号密码,关于master_log_file 和 Position, 是主库配置中得到的 ,主库中输入命令 show master status;      

命令1:stop slave; 命令2:change master to master_host='10.5.110.83',master_port=3307,master_user='slave',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=1306; 命令3:start slave;

2.9 主从关系就配置完成,(需要注意的是,在配置主从关系,对应连接的数据库需先创建),验证效果:主库中的数据库新增一个表,从库中会立即出现主库中的表;另外可以通过show slave status;查看从库备份主库数据中打印的日志信息,包括一些报错信息。

2.10 我在show slave status 出现的一些坑

       1.主从实例的uuid一样 报错;解决办法 :在某一实例的mysql命令行中,输入:select uuid(),生成一个uuid,在实例的data目录下的auto.cnf,修改uuid

      2. Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'  这样报错信息 ,解决办法:在命令行中输入三条命令,分三次输入,stop slave;reset slave;start slave;

    3.主从同步出现Error 'Can't create database 'test‘; database exists' 这样报错信息,解决办法:在命令行中输入三条命令,分三次输入   stop slave;set GLOBAL sql_slave_skip_counter=1;slave start  ;这样主从同步问题就解决了

最新回复(0)