场景:
公司业务数据一直使用单台MySQL服务器,现在需要扩展为主从结构,对于已经存在的数据需要不受影响
配置方法:
1、首先要导出主库的数据,分为两种情况,如果是innodb引擎的可以不锁表,反之要上锁。下面语句适用于innodb引擎,不用锁表。
mysqldump -u root --master-data=2 --single-transaction --databases database1 database2 >/mysqldata.sql # master-data=2 是为了记录binlog日志的位置,查看备份文件可以找到需要的postion # single-transaction innodb引擎加该选项不用锁表
如果非innodb引擎,先进行锁表再执行导出操作,防止导出数据中途插入了新内容(该终端不要退出,否则锁表会中止)
flush tables with read lock; #该语句只在当前会话生效,这个时候需要另启终端进行导出
2、主服务器启用二进制日志,然后重启服务
vim /etc/my.cnf log_bin = master-bin binlog_format = row server_id = 1
3、在Slave服务器上导入Master的备份数据
mysql -u root < /mysqldata.sql
4、验证数据是否导入成功
show databases;
5、在Master服务器上做授权操作
grant replication slave on *.* to 'repuser'@'192.168.1.110' identified by '123456' flush privileges
6、在Slave上执行同步语句,由于通常备份时会指定--master-data=2,所以master_log_file和master_log_pos可以在备份文件中看到:
也可以在Master服务器上执行show master status\G来查看
change master to master_host='192.168.1.100'. master_user='repuser', master_password='123456', master_log_file='mysql-bin.000004', master_log_pos=1484;
7、从服务器上执行SQL语句,如果Slave_IO_Running和Slave_SQL_Running两项的工作状态为yes就代表成功了
mysql > start slave mysql > show slave status\G
8、Master服务器解锁 unlock tables,然后插入数据测试同步情况
发表评论: