准备Slave数据库
- 新建目录,如:mysql3307,做为Slave数据库的目录。
- 复制Master Mysql目录下的share目录到mysql3307下。
- 在mysql3307目录下创建data目录,并复制Master Mysql的data下的mysql文件夹和test文件夹到mysql3307\data下。
- 复制Master Mysql目录下的my.ini到mysql3307下。
修改Master库的my.ini
修改Master Mysql目录下的my.ini文件。
找到[mysqld],添加如下内容:
log-bin=mysql-bin
server-id=1
#binlog-do-db=test
#binlog-ignore-db=mysql
创建备份账户
在Master库中创建有同步权限的用户:backup,密码:backup。
mysql>grant replication slave on *.* to backup@'localhost' identified by 'backup';
mysql>flush privileges;
修改Slave库的my.ini
修改mysql3307目录下的my.ini文件。
- 找到[client]下的port=3306,修改为:port=3307
- 找到[mysqld]下的port=3306,修改为:port=3307
- 添加如下内容:
log-bin=mysql-bin
#server-id的值要大于Master中mysql/my.ini中的id值
server-id=10
#mysql中的用户名
master-user=backup
#mysql中的密码
master-pass=backup
#mysql的端口号
master-port=3306
master-connect-retry=60
#要复制的数据库
replicate-do-db=test
将Slave配置为服务
命令行下运行:
mysqld -install mysql3307 --defaults-file="f:\mysql3307\my.ini"
注意:如果参数错误,此时不会有提示,但是在启动服务时,提示1607错误。
配置成功后,在window的服务中会看到相应的服务,服务名为:mysql3307。
PS
- 删除Mysql服务:mysqld -remove mysql3307。
- 启动Mysql服务:net start mysql3307
- 停止Mysql服务:net stop mysql3307
查询Master数据库的状态
这里需要记录File和Position的值。
mysql>show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 98 | | |
+------------------+----------+--------------+------------------+
设置Slave数据库
启动并登录Slave数据库
net start mysql3307
mysql -uroot -p -P3307
mysql命令中的参数:-P3307是指3307端口,-P必须大写。
输入Slave密码(因为是复制的Master数据库,所以密码和Master数据库相同),登录数据库。
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| test |
+--------------------+
看到mysql和test,说明是在mysql3307数据库实例中。
继续运行:
mysql>slave stop;
mysql>change master to
->master_host='127.0.0.1',
->master_user='backup',
->master_password='backup',
->master_log_file='mysql-bin.000001',
->master_log_pos=98;
注意:
- master_log_pos的值不要加引号。
- master_host一定要写IP地址。
继续运行:
mysql>set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql>slave start;
mysql>show slave status \G;
set GLOBAL SQL_SLAVE_SKIP_COUNTER=1,是指当Slave复制出错时,跳过错误。
如果查询结果显示如下内容,说明配置成功。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: test
主从数据库测试
可在Master数据库test中创建表,添加记录,在Slave数据库中可查询到添加的记录。