主服务器ip:192.168.0.101
从服务器ip:192.168.0.105
主服务器my.ini配置(我的电脑上的目录为D:\soft\MySQL\MySQL Server 5.6\data\my.ini)
[mysqld]
log-bin=mysql-bin //[必须]启用二进制日志
server-id=101 //[必须]服务器唯一ID,默认是1,一般取IP最后一段
从服务器my.ini配置(我的电脑上的目录为D:\soft\MySQL\MySQL Server 5.6\data\my.ini)
[mysqld]
log-bin=mysql-bin //[必须]启用二进制日志
server-id=105 //[必须]服务器唯一ID,默认是1,一般取IP最后一段
重启两台服务器上的mysql服务
在主服务器上建立帐户并授权slave:
先以root的身份登录mysql
mysql -uroot -proot
创建用于同步的mysql账号并授权只允许从服务器登录同步
GRANT REPLICATION SLAVE ON *.* to 'mysync'@'192.168.0.105' identified by 'q123456';
登录主服务器的mysql,查询master的状态
show master status;
注:执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化
5. 配置从服务器Slave:
先以root的身份登录mysql
mysql -uroot –proot
配置对应主服务器的信息(ip,用户名,密码,master_log_file,master_log_pos等参数)
change master to master_host='192.168.0.101',master_user='mysync',master_password='q123456', master_log_file='mysql-bin.000001',master_log_pos=332;
//注意不要断开,332数字前后无单引号。
master_host:主服务器的ip
master_user:主服务器上创建的用于两步的用户的用户名
master_password:主服务器上创建的用于两步的用户的密码
master_log_file和master_log_pos:前面主服务器使用show master status查看到的值
启动从服务器复制功能
Mysql>start slave;
6. 检查从服务器复制功能状态:
show slave status\G
注:Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)
以上操作过程,主从服务器配置完成。
7. 主从服务器测试:
主服务器Mysql,建立数据库,并在这个库中建表插入一条数据:
mysql> create database hi_db;
Query OK, 1 row affected (0.00 sec)
mysql> use hi_db;
Database changed
mysql> create table hi_tb(id int(3),name char(10));
Query OK, 0 rows affected (0.00 sec)
mysql> insert into hi_tb values(001,'bobu');
Query OK, 1 row affected (0.00 sec)
登录从服务器可查看到对应的数据库和表等都已经同步了。
使用以上过程进行同步后,虽然之后创建的数据库都可同步,但在配置同步之前的数据库是不能同步的,比如我的主机上有一个jeecg_gjh数据库是在同步之前已经创建的,同步后这个库是不会自动同步的从机上的,如果要同步需要手动执行以下操作:
1. 在主机上先锁定写入操作
mysql> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW MASTER STATUS;
记录下最新的position的值(后面从机上操作时需要用到),比如这边得到的值是3308
2. 另开一个窗口在主机上导出jeecg这个库
mysqldump -u jeecg -pjeecg --opt -R jeecg_gjh > d:/temp/jeecg_gjh20150904.sql
3. 把导出的sql拷贝到从机上
4. 在主机上创建同样的用户名,密码,库并导入刚才从主机上导出的数据
CREATE DATABASE `jeecg_gjh` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
grant all privileges on jeecg_gjh.* to jeecg@localhost identified by 'jeecg';
use jeecg_gjh;
source d:/temp/jeecg_gjh20150904.sql
5. 重启从机
STOP SLAVE;
reset slave;
6. 重新指定主机
change master to master_host='192.168.0.101',master_user='mysync',master_password='q123456', master_log_file='mysql-bin.000001',master_log_pos=3308;
注意这边的master_log_pos值为刚才在主机上得到的值
7. 再次重启从机
STOP SLAVE;
reset slave;
8. 在从机上执行以下命令
show slave status\G
如果Slave_IO及Slave_SQL进程必须正常运行,即YES状态则表明同步正常了。