如何在一台windows电脑上配置主从数据库.
参照这篇文章原文地址
环境:
phpstudy的mysql(主数据库)
xampp的MariaDB(从数据库)
参数
主库:IP 127.0.0.1, 端口 3306
从库:IP 127.0.0.1, 端口 3307
第一步:
修改主数据库的配置文件, 在phpstudy的my.ini文件[mysqld]标签最后加上这几段
#需要备份的数据库
binlog-do-db=zhihuf
#不需要备份的数据库
binlog-ignore-db=mysql
#开启二进制日志
log-bin=mysql-bin
#服务器id
server-id=1
然后保存退出,重启主数据库.
binlog-do-db用于指定需要同步的数据库,binlog-ignore-db指定不需要同步的数据库,如果这两个参数都不设置,则从数据库会复制主数据库的所有数据库。
第二步:
修改主数据库权限.
一般不用root账号作同步账号,我们需要在主数据库创建一个新的用户.账号:user01,密码:123456.
这里我使用了gitbash,而没有使用windows自带的CMD.
打开gitbash,使用root账号连接主数据库:
winpty mysql -u root -p -P3306
1.创建新用户:
create user ‘user01’@‘127.0.0.1’ identified by ‘123456’;
(@后面表示允许连接的客户端的IP,如果为%,则表示不限IP访问).
2.给新用户配置主从复制的权限:
grant replication slave on . to ‘user01’@‘127.0.0.1’ identified by ‘123456’;
3.我这里用了本地的一个数据库(zhihuf),为了防止该数据库的更新,我先将这个数据库锁定:
flush tables with read lock;
然后将这个数据库的数据用Navicat传输到的从库.然后解除锁定:
unlock tables;
现在查看主服务器的master状态:
show master status;
第三步:
修改从数据库配置和权限.
1.修改配置,直接点击config,修改[mysqld]标签配置.
#端口
port = 3307
#服务器id
server_id = 2
#开启二进制日志(从服务器不是必须要开启二进制日志)
log-bin=mysql-bin
保存退出,重启从库.
2.修改从数据库权限
连接从库:
winpty mysql -u root -p -P3307
配置复制的参数:
change master to master_host=‘127.0.0.1’,master_user=‘user01’,master_password=‘123456’,master_port=3306,master_log_file=‘mysqlbin.000003’,master_log_pos=373;
如果前面是按照这个步骤,那么修改最后两项参数就行.
参数详解:
master_host: 主服务器的IP
master_user: 主服务器上新创建的用户名
master_password: 用户的密码
master_port: 主服务器的端口,如果未曾修改,默认即可。
master_log_file: 主服务器二进制日志文件的名称,填写查看主服务器的master状态时显示的File的值
master_log_pos: 日志的位置,填写查看主服务器的master状态时显示的Position的值
3.启动从库的slave复制功能:
start slave;
4.查看从库的slave状态: show slave status \G
如果Slave_IO_Running 和 Slave_SQL_Running 的值都为 Yes,则说明主从复制的所有配置已成功,即从服务器已经可以自动与主服务器的数据库数据实现同步了。
此后,只要主服务器的数据有更新(比如:在 zhihuf数据库中新建了一张表或者表中的数据发生了变化),从服务器都会自动与主服务器保持一致。但如果有人刻意改变了从服务器的数据,主服务器中的数据并不会同步更新,除非我们把这两个MySQL服务器设置为互为主从。
在期间遇到了Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; these ids must be different for replication to work (or the --replicate-same-server-id option must be used on slave but this does not always make sense; please check the manual before using it).这是因为从库的server_id与主库的server_id冲突了,可以用
show variables like ‘server_id’;
查看当前数据库的server_id,如果冲突了则修改配置文件,xampp的MariaDB配置了server_id,把原来的注释掉.