注意:mysql主从复制,主从版本要一致!
mysql官网 https://dev.mysql.com/downloads/mysql/5.7.html#downloads
本人使用的是 Windows (x86, 64-bit), ZIP Archive
详细安装操作步骤参考: https://www.cnblogs.com/xiaxiaoxu/p/8977418.html
下载好后,在 mysql-5.7.22-winx64 文件夹中创建 data文件夹和 my.ini 文件
主:在my.ini 的 [mysqld] 中添加设置
port = 3306
basedir=C:\Program Files\mysql-5.7.22-winx64 (mysql文件夹路径)
datadir=C:\Program Files\mysql-5.7.22-winx64\data (data路径,存放日志文件)
log-bin=mysql-bin
server-id = 1
#binlog-do-db=test (本人未设置)
#binlog-ignore-db=mysql (本人未设置)
binlog-do-db=test 表示需要备份的数据库为test
binlog-ignore-db=mysql 表示不需要备份的数据库为mysql
如果两个都不设的话,从服务器会复制主服务器的全部数据库 (本人就是此设置)
log-bin=mysql-bin 表示开启二进制日志,并把二进制日志前缀改为mysql-bin
MySQL安装过程:
在系统变量中 新建一个变量名:MYSQL_HOME,
变量值:C:\Program Files\mysql-5.7.22-winx64 (主 mysql文件路径)
以“管理员身份”运行 cmd,进入mysql的bin目录
以下图片仅视作参考
运行命令:mysqld --initialize (此时会生成data目录)
运行mysqld -install (安装)
运行net start mysql (启动mysql服务)
可以在任务管理器中看到MySQL服务
设置root账户密码:
在my.ini文件(MySQL的配置文件)的[mysqld]下加一行 skip-grant-tables
然后在任务管理器中重启MySQL服务
重启MqSQL服务后,运行mysql -uroot -p,可以成功登入mysql
然后更新root账户的密码为'root'
命令:update mysql.user set authentication_string=password("root") where user="root";
然后输入flush privileges;(刷新账户信息)
执行quit或ctrl+Z退出
然后将my.ini文件中刚才加的 skip-grant-tables 这一行删掉,保存后再重启MySQL服务
然后运行mysql -uroot -proot就可以用root用户名和root密码登陆了
启动主服务后,在mysql中创建新用户:
create user 'mytest'@'127.0.0.1' identified by '123456';
注:
@后面的ip地址为允许连接的客户端的ip地址。mytest是用户名,123456是密码
然后,给新用户配置主从复制的权限:
grant replication slave on *.* to 'mytest'@'127.0.0.1' identified by '123456';
注:
@后面的ip地址为允许连接的客户端的ip地址,如果改为 ‘%’,就表示客户端没有ip地址的限制
然后查看主服务master的状态: (每重启一次mysql服务,mysql-bin的日志就会新建一个,所以重启主服务,从服务必须先停止再重新配置后启动)
show master status;
+——————+———-+————–+——————+——————-+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+——————+———-+————–+——————+——————-+
| mysql-bin.000003 | 106 | test | mysql | |
+——————+———-+————–+——————+——————-+
注意:
记住file,和position,因为等下配置从数据库的时候会用到
从:在my.ini 的 [mysqld] 中修改设置
[mysqld]
port = 3307
basedir=D:\mysql2\mysql-5.7.22-winx64
datadir=D:\mysql2\mysql-5.7.22-winx64\data
log-bin=mysql-bin
server-id = 2
replicate-do-db=test
#同步某表用 replicate-wild-do-table
replicate-wild-do-table =test.test
replicate-wild-do-table =test.test1
replicate-wild-do-table =test.test2
保存my.ini后
在系统变量 MYSQL_HOME 中 新增 变量值: D:\mysql2\mysql-5.7.22-winx64 (从 mysql文件路径)
用管理员身份运行cmd,进行mysql的安装 (参考上诉主服务mysql安装)
运行 D:\mysql2\mysql-5.7.22-winx64\bin目录下的mysql
mysqld install MySQL2 --defaults-file="D:\mysql2\mysql-5.7.22-winx64\my.ini"
如果提示“Service successfully installed”则说明安装成功
之后连接mysql mysql -uroot -p -P3307 (mysql 3307的密码设置 参考住服务的root设置)
启动后执行
change master to master_host='localhost',master_user='mytest',master_password='123456',master_log_file='mysql-bin.000008',master_log_pos=1114;
启动从服务的slave复制功能:
start slave;
查看从服务器的slave状态:
show slave status \G
***************** 1. row *****************
Slave_IO_State: Waiting for master to send event
Master_Host: 127.0.0.1
Master_User: mytest
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 106
Relay_Log_File: DESKTOP-DMGAKUM-relay-bin.000002
Relay_Log_Pos: 251
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
如果 Slave_IO_Running 和 Slave_SQL_Running 的值都为 Yes,则说明主从复制的所有配置已成功,即从服务器已经可以自动与主服务器的数据库数据实现同步了。