Mysql主从复制配置(2)

本文详细介绍了MySQL主从复制的配置方法,包括修改配置文件、创建复制用户、备份主服务器数据、导入数据到从服务器以及灾难恢复策略。通过实际步骤演示,帮助读者轻松实现MySQL主从复制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Mysql主从复制是一台服务器充当主服务器,另一台或多台服务器充当从服务器,主机自动复制到从机。对于多级复制,数据服务器即可充当主机,也可充当从机。 Mysql复制的基础是主服务器对数据库修改记录二进制日志 binlog,从服务器通过主服务器的 binlog自动执行更新。

 

下面以 InnoDB 引擎为例,说明配置主从复制的方法。
 
1 配置 /etc/my.cnf
修改主服务器 my.cnf,在 [mysqld]中增加如下内容:
## 打开 binlog
log-bin=mysql-bin
## 服务器 ID 。服务器之间不能有重复 ID ,一般主是 1
server-id       = 1
## 指定不写 binlog 的数据库,不同步系统库
binlog-ignore-db = mysql
binlog-ignore-db = information_schema
binlog-ignore-db = cluster
## 指定写二进制的数据库,多个要多行
replicate-do-db = DB_Test
## 指定跨库更新也同步的数据库。和 replicate-do-db 相同多行
replicate-wild-do-table=DB\_Test.%
 
修改从服务器 my.cnf,设置 server-id=2。
另外,主从服务器的 ip和端口信息配置不在 my.cnf里配置,整合到后面的 change master命令里。
修改了 my.cnf,重启主从服务器:
mysqladmin -uroot shutdown
 
2 主服务器上添加数据库复制用户
在主服务器上,必须为从服务器创建主从复制的用户 ,并设置 replication slave权限。所用具体命令如下:
grant replication slave on *.* to rep@'172.25.38.145' identified by '';
flush privileges;
172.25.38.145是从服务器,就通过 rep用户密码为空来同步复制。通过查询 user表查看 Repl_slave_priv的值为 Y:
select * from mysql.user where user='rep'\G;
 
3 导出主服务器数据
主服务器上要保证数据一致性,获取数据快照。在获取快照后,主服务器不能有写操作。
刷新所有语句并阻止写入 ,这样的目的是保证主机数据快照的一致性:
FLUSH TABLES WITH READ LOCK;
执行完这句后,所有对主服务器数据库的更新都被挂起,直到执行 UNLOCK TABLES;或者关闭当前的终端。
获取主服务器的快照 :
show master status\G;
记录 File 及 Position 项的值,以便之后对从服务器进行配置。 File是当前处理的 binlog, Position是处理的 binlog位置,这是从服务器的同步起点。
接下来是导出主服务器的数据。导出数据有两种方式: mysqldump导出需要同步的数据库和拷贝数据库数据目录。
 
1) mysqldump 方式备份数据
Mysqldump适合数据库还不是特别大的情况。
导出主服务器需要同步的数据库数据,在另一个终端上执行命令:
mysqldump -uroot DB_Test1 DB_Test2 –opt –single-transaction –flush-logs –routines –force –database > master.sql
导出数据后就可以解锁了:
UNLOCK TABLES;
 
2) 拷贝文件方式备份数据
拷贝文件是主服务器上的数据文件目录打包到从服务器上。
拷贝文件的方式需要关闭数据,比较适合数据库庞大 mysqldump比较慢的场合。注意 : binlog可能非常庞大,影响文件备份速度。可以定期移走不用的 binlog,通过 show slave status查看当前的 binlog,移走这以前的 binlog。
对于 MyISAM引擎,可以在不关闭数据库的情况下直接 tar,但对于 InnoDB事务型数据库,就麻烦一些了。商业软件 InnoDB Hot Backup提供了在线备份工具,除了这个收费的工具,最简单的办法就是关闭主服务器后执行 tar。
新开一个终端(不能在 FLUSH TABLES WITH READ LOCK;的终端操作),关闭主服务器
mysqladmin -uroot shutdown
打包数据库数据目录,例如数据目录是 /data/dbdata:
cd /data
tar zcvf dbdata.tar.gz dbdata
备份后就可以启动主服务器了:
mysqld_safe –user=mysql &
 
以上两种备份选择任意一种即可,把文件 scp到从服务器上。
 
4 数据导入到从服务器
在从服务器上导入数据 。两种不同的备份方式分别对应其数据导入的方式。
1) Mysqldump 方式的导入
mysql -uroot <./master.sql
 
2) 备份文件方式的导入
由于需要置换成主服务器的数据目录,先关闭服务:
mysqladmin -uroot shutdown
备份数据目录
mv dbdata dbdata.bak
解包从主服务器拷贝来的数据目录
tar zxvf dbdata.tar.gz
要确保文件的权限属主等设置没问题, dbdata目录应该是 mysql:mysql用户所有。
 
以上二选一,完成数据导入。
删除 dbdata下的主机信息文件和中继日志文件:
rm dbdata/master.info
rm dbdata/relay-log.info
如果是拷贝文件方式同步,还需要启动从服务器:
mysqld_safe –user=mysql &
 
5 在从服务器上开始同步
在从服务器上操作 ,连接主服务器开始同步数据:
Change master to
Master_host = '10.6.209.126',
Master_port = 3306,
Master_user = 'rep',
Master_password = '',
Master_log_file = 'mysql-bin.000034',
Master_log_pos = 102;
这里包含的信息有主机的地址和端口、主机提供的复制帐号、主机的 binlog位置信息。 Master_log_file和 Master_log_pos是主服务器的快照信息,从服务器从该 binlog的相应位置开始从主服务器同步数据。
启动从服务器线程就可以开始同步了:
start slave;
一旦从服务器开始同步了,就能在数据文件目录下找到 2个文件 master.info和 relay-log.info。从服务器利用这 2个文件来跟踪处理了多少 master的 binlog。
分别在主从服务器 show processlist查看连接,就可以看到 rep用户的连接,可证明复制已经生效。
 
灾难恢复
主从不同步
如果主从同步出现了不一致,就需要重新实施主从复制。步骤和上面相同,只是省略了修改配置文件和创建用户的步骤。
重新配置之前,需要在从服务器停止同步线程:
stop slave;
 
从从服务器恢复
如果主机挂了,可以把从服务器提升为主机,把原主服务器作为备机。
先在从服务器停止同步线程:
stop slave;
在从服务器上添加同步用户:
grant replication slave on *.* to rep@' 新的从服务器 ip' identified by '';
flush privileges;
配置文件中 my.cnf的 server-id可以不修改,只要保证 id不冲突就行了。
然后,按照主从复制的步骤来进行操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值