注意:mysql主从复制,主从版本要一致!正常情况下,主从mysql应该安装在两台服务器上
1.下载mysql的安装包
mysql官网:http://dev.mysql.com/downloads/mysql/
这里会有msi格式的和zip格式,msi格式的需要点击安装,这里不讲这个,接下来讲的是zip格式。
2.解压mysql的zip包
解压 zip 压缩文件,得到 一个文件夹 ,将其拷贝到你想要放的目录(比如我是放在D:/tools/mysql下
复制两份),然后分别将文件夹重命名为 mysql1 和 mysql2 。
3.安装主mysql
找到mysql1的配置文件模板D:\tools\mysql\mysql1 目录下的 my-default.ini,重命名为 my.ini,在 [mysqld] 标签下添加如下代码:
[mysqld]
basedir = D:\tools\mysql\mysql1
datadir = D:\tools\mysql\mysql1\data
binlog-do-db=test
binlog-ignore-db=mysql
log-bin=mysql-bin
注:
binlog-do-db=test 表示需要备份的数据库为test
*binlog-ignore-db=mysql 表示不需要备份的数据库为mysql
如果两个都不设的话,从服务器会复制主服务器的全部数据库
log-bin=mysql-bin 表示开启二进制日志,并把二进制日志前缀改为mysql-bin
其他的不用修改保存my.ini文件,然后以管理员的身份运行cmd,将工作目录切换到D:\tools\mysql\mysql1\bin下,运行
mysql -install
如果提示“Service successfully installed”,则说明mysql服务安装成功,默认的服务名称为MySQL,端口号为3306,密码默认为空
连接mysql主服务器
mysql -uroot -p -P3306
然后创建新用户:
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> show master status;
+——————+———-+————–+——————+——————-+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+——————+———-+————–+——————+——————-+
| mysql-bin.000003 | 106 | test | mysql | |
+——————+———-+————–+——————+——————-+
注意:
记住file,和position,因为等下配置从数据库的时候会用到
4.安装从mysql
找到mysql2的配置文件模板D:\tools\mysql\mysql2 目录下的 my-default.ini,重命名为 my.ini,并修改如下这几项:
[client]
port = 3307
[mysqld]
port= 3307
basedir=D:\tools\mysql\mysql2
datadir=D:\tools\mysql\mysql2\data
server-id = 2
保存my.ini后,用 管理员身份 运行cmd,并切换到D:\tools\mysql\mysql2\bin目录下,运行
mysqld install MySQL2 --defaults-file="D:\tools\mysql\mysql2\my.ini"
如果提示“Service successfully installed”则说明安装成功了,这时候我们连接从myslq
mysql -uroot -p -P3307
配置复制的参数:
change master to master_host=’127.0.0.1’,master_user=’mytest’,master_password=’123456’,master_port=3306,master_log_file=’mysql-bin.000003’,master_log_pos=106;
参数详解:
master_host: 主服务器的IP
master_user: 主服务器上新创建的用户名
master_password: 用户的密码
master_port: 主服务器的端口,如果未曾修改,默认即可。
master_log_file: 主服务器二进制日志文件的名称,填写查看主服务器的master状态时显示的File的值
master_log_pos: 日志的位置,填写查看主服务器的master状态时显示的Position的值
启动从服务的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,则说明主从复制的所有配置已成功,即从服务器已经可以自动与主服务器的数据库数据实现同步了。
此后,只要主服务器的数据有更新(比如:在 test数据库中新建了一张表或者表中的数据发生了变化),从服务器都会自动与主服务器保持一致。但如果有人刻意改变了从服务器的数据,主服务器中的数据并不会同步更新,除非我们把这两个MySQL服务器设置为互为主从。
注:
如果有任一个显示NO,则证明同步有问题。可以查看数据库日志文件,里面基本上会显示出错误之处,根据错误一步一步排查,基本上都可以解决的。数据库日志在data目录下,错误日志的后缀是.err