MySQL 主从复制配置 本地 windows环境 启动多个 MySQL 服务
一,安装MySQL服务实例
1,MySQL 官网下载地址: https://dev.mysql.com/downloads/mysql/
2,解压复制MySQL实例
二,主服务器( Master)的配置
1,在 mysql-5.7.26-winx64_v1
创建编辑 my.ini
文件
编辑 my.ini
文件,如果目录路径带\
是无法被编译的,运行时会报异常;log-bin 日志存储 mysql-log
目录是自定义的,需要自行手动创建,否则会报异常。
[Client]
port = 3307
[mysqld]
#设置3306端口
port = 3307
# 设置mysql的安装目录
# D:\tool\MySql\mysql-5.7.26\mysql-5.7.26-winx64_v1 无法被编译
basedir=D:/tool/MySql/mysql-5.7.26/mysql-5.7.26-winx64_v1
# 设置mysql数据库的数据的存放目录
# D:\tool\MySql\mysql-5.7.26\mysql-5.7.26-winx64_v1 无法被编译
datadir=D:/tool/MySql/mysql-5.7.26/mysql-5.7.26-winx64_v1/data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# server-id 服务编号,唯一的;
server-id = 1
### 主从复制配置 ###
# log-bin 日志存储地址文件名
# D:\tool\MySql\mysql-5.7.26\mysql-5.7.26-winx64_v1 无法被编译
log-bin=D:/tool/MySql/mysql-5.7.26/mysql-5.7.26-winx64_v1/mysql-log/log-bin.log
# binlog-do-db 进行日志记录的数据库名称,存在多个数据库,则用逗号","分隔;
binlog-do-db=master_slave_configuration
# binlog-ignore-db 忽视数据库
binlog-ignore-db=mysql,information_schema,performance_schema
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
2,管理员打开命令窗口,初始化MySQL服务
搜索cmd找到命令提示符,右键以管理员身份运行,进入mysql安装目录下方的bin目录
进入bin 目录:cd D:\tool\MySql\mysql-5.7.26\mysql-5.7.26-winx64_v1\bin
3,初始化MySQL:mysqld --initialize --user=mysql --console
加–console是显示初始化信息,这样初始密码会显示在信息里面,方便后面进入数据库;
初始化成功后,系统会在mysql目录下创建data目录,并生成初始密码。
注意:在初始化时未手动创建 mysql-log
目录,触发异常;
4,注册MySQL服务:mysqld --install mysql --defaults-file=D:\tool\MySql\mysql-5.7.26\mysql-5.7.26-winx64_v1\my.ini
注:mysqld --install mysql --defaults-file=自己本地(master)的my.ini路径
显示 Service successfully installed.
表示安装成功。
5,按win+R,在弹框中输入regedit,点击确定,打开注册表;
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services
目录
在目录导航栏搜索 MySQL
服务名称,如果需要修改相关配置,编辑ImagePath
右击修改;
6,启动主服务器(mysql)
启动MySQL服务:net start mysql
进入配置文件指定端口数据库(-P需要大写):mysql -u root -P 3307 -p
更改初始密码:set password=password('root');
创建一个公共访问的账号:GRANT ALL ON *.* TO root@'%' IDENTIFIED BY '123456';
开通从服务器( Slave )访问主服务器( Master )的权限
grant replication slave on *.* to 'root'@'%' identified by '123456';
查看授权信息
show master status \G
三, 从服务器( Slave )的配置
1,复制 mysql-5.7.26-winx64_v1
,粘贴重命名为 mysql-5.7.26-winx64_v2
编辑 my.ini
文件
[Client]
port = 3308
[mysqld]
#设置3306端口
port = 3308
# 设置mysql的安装目录
# D:\tool\MySql\mysql-5.7.26\mysql-5.7.26-winx64_v2
basedir=D:/tool/MySql/mysql-5.7.26/mysql-5.7.26-winx64_v2
# 设置mysql数据库的数据的存放目录
# D:\tool\MySql\mysql-5.7.26\mysql-5.7.26-winx64_v2\data
datadir=D:/tool/MySql/mysql-5.7.26/mysql-5.7.26-winx64_v2/data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# server-id 服务编号,唯一的;
server-id = 2
# log-bin 日志存储地址文件名
# D:\tool\MySql\mysql-5.7.26\mysql-5.7.26-winx64_v2\mysql-log
log-bin=D:/tool/MySql/mysql-5.7.26/mysql-5.7.26-winx64_v2/mysql-log/log-bin.log
# replicate-do-db 复制数据库名称,存在多个数据库,则用逗号","分隔;
replicate-do-db=master_slave_configuration
# replicate-ignore-db 忽视数据库
replicate-ignore-db=mysql,information_schema,performance_schema
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
2,初始化MySQL服务与主服务一致
3,注册MySQL服务:mysqld --install mysql2 --defaults-file=D:\tool\MySql\mysql-5.7.26\mysql-5.7.26-winx64_v2\my.ini
注:mysqld --install mysql2(因为MySQL主服务以注册了该名称这改为MySQL2)
--defaults-file=自己本地(slave)的my.ini路径
显示 Service successfully installed.
表示安装成功。
4,查看服务注册情况,并启动服务
查看服务注册是否成功
启动MySQL2
服务:`net start mysql2
进入配置文件指定端口数据库(-P需要大写):mysql -u root -P 3308 -p
更改初始密码:set password=password('root');
5,设置主库的信息,将从库和主库联系起来
change master to
master_host='192.168.3.34',
master_user='root',
master_port=3307,
master_password='123456',
master_log_file='log-bin.000003',
master_log_pos=434;
master_log_file
和 master_log_pos
配置是和主服务器 show master status \G
对应
6, 启动 slave
# 启动
start slave;
# 关闭
stop slave;
7,查看 slave 启动的状态 show slave status \G
Slave_IO_Running: Connecting
连接异常;查看 user ,password 账号密码是否正确,可否能正常访问主服务器;注意127.0.0.1不行就切换网络IP地址;
slave 未启动情况
四,测试同步
在 Master
主服务器 master_slave_configuration
库 新增一张表;
然后查看 Slave
从服务器 master_slave_configuration
库也多了一张表;
做主从配置的时候一定要保证主服务器的数据库和从服务器的数据库的数据一致的。