win下实现mysql主从同步
前提准备
要准备安装好两个数据库(我是安装了两个同一版本)
一.安装从数据库
1.解压MySQL安装压缩包
解压安装包压缩文件,如果本机已经安装过,则只需放在另一个文件夹重命名安装
解压后文件有:
2.新建从数据库的配置文件my.ini
只需要注意从数据库(slave)
server-id=2 #必须设置多个数字就递增
general_log = 0
port=8306 #因为在同一个机器上运行端口号要不同
[mysqld]
#主库配置
server-id=2
# 关闭日志
general_log = 0
#开启二进制日志
log_bin=mysql-bin
log_bin-index=mysql-bin.index
# skip-grant-tables
# 设置3306端口
port=8306
# 设置mysql的安装目录
basedir=D:\Install_all\mysql-5.7.28-winx64_slave\ # 切记此处一定要用双斜杠\\,单斜杠我这里会出错。
# 设置mysql数据库的数据的存放目录
datadir=D:\\Install_all\\mysql-5.7.28-winx64_slave\\Data # 此处同上
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
# 服务端使用的字符集默认为UTF8
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=8306
default-character-set=utf8
3.生成data(Data)文件
如果计算机已经启动了mysql服务,最好将服务关掉,关掉的方法有多种:
(1) 打开“服务”找到mysql的相关服务再手动停掉
(2)打开cmd
net stop mysql # 你的服务名是什么就写什么
关掉服务后,打开cmd,在mysql安装路径(D:\Install_all\mysql-5.7.28-winx64_slave\bin )的bin目录下执行代码:
不熟悉cmd命令可以打开文件夹bin,再在文件栏全选输入cmd,再回车,cmd就跳出来了。
mysqld --initialize-insecure --user=mysql
4.绑定my.ini配置文件,重新安装mysql服务
(1)为了更好的区分主从服务,给服务命名为mysql_slave,
cmd命令行中的cd 到该MySQL安装目录的bin目录下 运行“
mysqld --install "mysql_slave" --defaults-file="D:\Install_all\mysql-5.7.28-winx64_slave\my.ini"
(2)安装成功,服务里会有出现
(3)可以手动启动,也可以命令行启动服务
net start mysql_slave
5.打开mysql,进行用户密码设置,保证只打开这一个mysql_slave服务
(1)登录进入mysql
mysql -uroot -p #直接回车,不需要密码
(2)更改密码
# 我密码就直接mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';
(3)退出mysql,exit,
(4)再打开mysql看看有没有成功
mysql -uroot -pmysql -h 127.0.0.1 --port=8306
二、主数据库设置
1.若已经安装过的数据库,直接更改主数据库中的my.ini文件即可,
my.ini如下
[mysqld]
#主库配置
server-id=1
#开启二进制日志
log_bin=mysql-bin
log_bin-index=mysql-bin.index
# skip-grant-tables
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir=D:\Install_all\mysql-5.7.28-winx64\ # 切记此处一定要用双斜杠\\,单斜杠我这里会出错。
# 设置mysql数据库的数据的存放目录
datadir=D:\\Install_all\\mysql-5.7.28-winx64\\Data # 此处同上
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
# 服务端使用的字符集默认为UTF8
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8
2.重新安装mysql主服务加载更改的my.ini配置文件,服务命名mysql-master
(保证原来运行的服务停掉)
(1)重新安装mysql主服务加载更改的my.ini配置文件
mysqld --install "mysql-master" --defaults-file="D:\Install_all\mysql-5.7.28-winx64\my.ini"
(2)开启mysql-master服务,
net start mysql-master
如果从机数据库没有关掉,则此时应该是这样的:
(3) 打开mysql-master服务的mysql
mysql -uroot -pmysql #端口默认3306
(4)两个数据库如下:
3.从机备份主机原有数据
# 1. 收集主机原有数据在那个主机执行数据导出
$ mysqldump -uroot -pmysql --all-databases --lock-all-tables > master_db.sql
# 2. 从机复制主机原有数据(把导出文件可以复制到当前路径)
$ mysql -uroot -pmysql -h127.0.0.1 --port=8306 < master_db.sql
四、主从同步实现
1.登录到主机mysql,端口为3306那个,创建用于从服务器同步数据的帐号
# 登录到主机
$ mysql –uroot –pmysql
# 创建从机账号
$ GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' identified by 'slave';
# 刷新权限
$ FLUSH PRIVILEGES;
2.展示主数据库的二进制日志信息
$ SHOW MASTER STATUS;
3.mysql从数据库连接到mysql主数据库
# 登录到从机
$ mysql -uroot -pmysql -h 127.0.0.1 --port=8306
# 从机连接到主机,对比上图
$ change master to master_host='127.0.0.1', master_user='slave', master_password='slave',master_log_file='mysql-bin.000001', master_log_pos=334;
# 开启从机服务
$ start slave;
# 展示从机服务状态
$ show slave status \G
4.主机数据库创建一个databas,取从机看看有没有更新
# 在主机创建
create database test——slave;
遇到的坑:
这个时候就要对比日志文件 Master_Log_File: mysql-bin.000004 有没有写错:
# 查看从机
show slave status \G
# 查看主机
SHOW MASTER STATUS;