配置新数据库的主从复制
环境
主windows 8 ,mysql-5.5.18-win32.msi
从windows 7 ,mysql-5.6.24-win64.zip
主服务器地址:192.168.1.2
从数据库地址:192.168.1.3
主服务器端配置
(1)
在mysql下找到my.ini文件,在其[mysqld] 下添加主服务器端配置:
server-id=1 #服务器 id
log-bin=C:\ProgramFiles\MySQL\MySQL Server 5.5\mysql-bin #二进制变更日志存放路径
binlog-do-db=test1 #待同步的数据库
binlog-ignore-db=information_schema #忽略不同步的数据库,这个可以不用写
binlog-ignore-db=mysql #忽略不同步的数据库,这个可以不用写
binlog-ignore-db=test #忽略不同步的数据库,这个可以不用写
保存my.ini文件,重启数据库,然后会在C:\Program Files\MySQL\MySQL Server 5.5 下看到mysql-bin.index 文件和mysql-bin.000001文件;
(2)
命令登录数据库(mysql -u用户名 -p密码)
> mysql -uroot –p******
在主服务器 的mysql数据库中建立一个同步专用账户"slave"并且只能允许从192.168.1.3这个地址上来登陆,密码是123456
> grant replication slave,reload,super on *.* to slave@192.168.1.3identified by '123456';
输入命令 show master status; # 找到File 和 Position 的值记录下来;
其实,主服务器是不需要设置太多信息的,只需要第1条中的前三行就足够了。
从服务器端配置
(1)
从服务器上测试:mysql -uslave -p123456 -h 192.168.1.2,查看能否连接主数据库成功
(2)
在mysql下找到my.ini文件,在其[mysqld] 下添加从服务器端配置:
server-id=2 #服务器 id ,不能和主服务器一致
replicate-do-db=test1 #待同步的数据库
binlog-ignore-db=information_schema #忽略不同步的数据库,这个可以不用写
binlog-ignore-db=mysql #忽略不同步的数据库,这个可以不用写
binlog-ignore-db=test #忽略不同步的数据库,这个可以不用写
保存my.ini文件,重启数据库。
(3)
设置登录主数据库的账号和密码等信息,然后启动slave。
mysql>changemaster to master_host='192.168.1.2',master_user='slave',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=107;
(master_log和master_log_pos则对应主服务器show master status;命令查看到的数据)
ps:可能会报一个错误,大概的意思是说slave线程正在运行,不能设置,这样的话,执行mysql>stop slave; 停止slave线程,然后再设置连接的参数;
设置完之后,执行 mysql> start slave; 开启slave线程
(4)
查看从数据库的信息
mysql>show slave status \G;
如果出现:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
以上两项都为Yes,那说明没问题了
(5)
测试主从复制是否有效果
在主数据库中创建一个新的表
create table t_test1(id int not null auto_increment primarykey);
然后再切换到从数据库查看是否同样多出同名的表
主主同步也是相同的配置,只是相互为主机和从机的设置;
配置旧数据库的主从复制
如果一开始数据库的架构不是主从复制,并且运行一段时间后已经有数据存在,那配置的方式略有不同。
(1)
编辑主数据库的my.ini文件,加上一下内容:
binlog-do-db=landclash
(2)
重启主数据库,然后在主数据库中锁定所有的表
mysql>flush tables with read lock