mysql主从同步

我们在一个电脑上演示MySQL主从同步

首先下载或去复制两份MySQL,一个是主,一个是从,这里演示的是5.7的版本。

  • 更改第一个主的MySQL的配置文件(my.ini):
    主要更改其中框中的部分没有就加,路径和自己电脑mysql的路径对应
    (注意:不要改到client那去了,引号无所谓)
[mysqld]
default-time-zone='+08:00'
#------------------------------------------------------------------------------
# 修改端口
port=3307

#打开二进制日志
log-bin=mysql-bin

#唯一id
server-id=1

#打开日志记录
general-log=1
log-output=FILE
general-log-file="D:\MysqlJiQun\mysql-master\master.log"

# 设置mysql的安装目录
basedir=D:\MysqlJiQun\mysql-master

# 设置mysql数据库的数据的存放目录
datadir=D:\MysqlJiQun\mysql-master\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

然后把这个服务注册一下:
在bin目录下运行cmd(注意:要以管理员运行,否则会失败):

mysqld --install master --defaults-file="D:\MysqlJiQun\mysql-master\my.ini"

注册成功后:在进行初始化(注意:查看data目录下,确保没有任何文件,有就干掉):

mysqld --initialize

等待初始化完毕后,启动服务:

net start master

如果在data目录下找到生成的.err文件,并找到下面这段话获取密码:(加粗的就是密码)
[Note] A temporary password is generated for root@localhost: JwtT&tu%b5=N
用这个密码去登录mysql(如果有多个mysql,就指定一下端口):

mysql -u root -P 3307 -h 127.0.0.1 -p

需要更改密码(在mysql登录状态):

set password for root@localhost = password('新密码');  

第一个主mysql就弄好了:
查看data下面是否有mysql-bin.000001的文件,这就是我们要进行主从同步的关键。


  • 第二个从的MySQL配置文件
    和上面差不多的操作步骤,也是注册一个mysql,路径不同,端口不同:
[mysqld]
default-time-zone='+08:00'
#------------------------------------------------------------------------
# 修改端口
port=3308

#打开二进制日志
log-bin=mysql-bin

#唯一id
server-id=10

#打开日志记录
general-log=1
log-output=FILE
general-log-file="D:/MysqlJiQun/mysql-slave/slave.log"

# 设置mysql的安装目录
basedir=D:\MysqlJiQun\mysql-slave

# 设置mysql数据库的数据的存放目录
datadir=D:\MysqlJiQun\mysql-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=3306
default-character-set=utf8

注册服务的方式一样,注意点也是。


  • 两个MySQL都注册完成,并都可以访问,进行主从同步:
    然后在Navicat中连接两个mysql:
    master主的连接上随便创建一个数据库,打开查询:
    运行这一句SQL,表示授权一个wltest用户 密码是admin的访问权限:
GRANT REPLICATION SLAVE ON *.* to 'wltest'@'127.0.0.1'IDENTIFIED by 'admin';

在运行SQL,获取数据库的位置(Position的值):

show master status;

slave从的连接上随便创建一个数据库,打开查询:
运行一下SQL,注意修改

CHANGE master to 
				master_host='127.0.0.1',  				#master的ip地址
				master_user='wltest',					#master授权的用户名
				master_password='admin',				#master授权的密码
				master_port=3307,						#master的端口
				master_log_file='mysql-bin.000001',		#master的data目录下的二进制文件名
				master_log_pos=636;						#刚刚获取的数据库位置

如果有问题,就运行:stop slave;
再执行上述sql语句。
最后重启slave服务(必须重启才能生效);
重启后运行SQL:show slave status;
看到以下效果说明已生效:
在这里插入图片描述
测试:
在master的连接中创建一个新的数据库,查看slave,出现同步的数据库;
新建一张表,查看slave,出现同步的表。
新插入一条数据,查看slave,出现同步的表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值