目的:应付不断增加的数据库访问压力,采用主从数据库的分布式结构,将读写分开,降低I/O压力和数据库访问压力 ;
MySQL数据库复制机制的特点
l 主库必须启用Bin log,主库和从库必须有唯一的Server Id;
l 从库必须清楚了解从主库的哪一个Bin log文件的哪一个偏移位置起开始复制;
l 从库可以从主库只复制指定的数据库,或者数据库的某些数据表;
l 主库和从库的数据库名称可以不一样,不过还是推荐使用一样的名称;
l 主库和从库的MySQL版本需保持一致;
准备
主(MASTER)
服务器 | 192.168.0.1 |
数据库名称 | db_test |
端口 | 3306 |
从(SLAVE)
服务器 | 192.168.0.2 |
数据库名称 | db_test(主从数据名称最好一致,便于管理和访问) |
端口 | 3306 |
实施
MASTER:
1、 停止所有操作MASTER数据库的访问进程;
2、 完全备份现有数据库,db_test.bak.sql;
3、 创建同步专用用户,user_sync,密码:pwd;
4、 绑定从服务器(SLAVE),赋予user_sync同步权限;
GRANT FILE ON *.* TO user_sync@192.168.0.2 IDENTIFIED BY 'pwd';
GRANT REPLICATION SLAVE ON *.* TO user_sync @192.168.0.2 IDENTIFIED BY ' pwd '; |
5、 停止MASTER服务,修改MySQL配置文件mysql.ini,在节点[mysqld]加入如下配置信息:
指定ServerID为1001
指定需要同步的数据库db_test
指定同步日志名称mysqlbin_test
################################################################### server-id=1001 binlog-do-db=db_test log-bin = 'mysqlbin_test'# ################################################################### |
6、 启动MASTER服务;
7、 查看MASTER状态:
命令:SHOW MASTER SATUS/G;/*查看Master状态*/ 结果:(示例,具体的值可能不一致)
记录File和Position的值,用于Slave的配置: File = mysqlbib_test.000001 Position = 98 |
8、
SLAVE:
在Slave数据库上
1、 创建从(Slave)数据库db_test;
2、 还原上述Master的数据库备份,这样做的目的是保持MASTER和SLAVE的同步起始点一致;
3、 停止SLAVE服务,修改MySQL配置文件mysql.ini,在节点[mysqld]加入如下配置信息:
指定ServerID为2001
指定需要同步的数据库db_test
指定同步日志名称mysqlbin_test
################################################################### server-id=2001 binlog-do-db=db_test log-bin = 'mysqlbin_test'# ################################################################### |
4、 启动SLAVE服务,执行如下的命令:
CHANGE MASTER TO MASTER_HOST='192.168.0.1', MASTER_USER=' user_sync ', MASTER_PASSWORD=' pwd ', MASTER_LOG_FILE=' mysqlbib_test.000001', /*上述File的值*/ MASTER_LOG_POS=98; /*上述Position的值*/ |
注:也可以直接修改文件(/data/master.info)
14 mysqlbib_test.000001 # MASTER_LOG_FILE 98 # MASTER_LOG_POS 192.168.0.1 # MASTER_HOST user_sync # MASTER_USER pwd # MASTER_PASSWORD 3306 # MASTER_PORT 60 # 同步周期(s) 0 |
5、 重新启动SLAVE服务;
6、 执行如下命令,启动Slave
START SLAVE; |
7、 查看SLAVE状态:
命令:SHOW SLAVE STATUS/G; 结果:(示例,具体的值可能不一致)
确认 Slave_IO_Running和Slave_SQL_Running的值为YES |
8、 修改MASTER数据,验证SLAVE数据是否同步;