MySQL的AB复制原理

[复制链接]

该用户从未签到

累计在线
150分钟
发表于 2015-2-3 13:27:28 | 显示全部楼层 |阅读模式

   MySQL是一种开放源代码的关系型数据库管理系统,MySQL数据库系统使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理。

        由于MySQL是开放源代码的,因此任何人都可以在General Public License的许可下下载并根据个性化的需要对其进行修改。MySQL因为其速度、可靠性和适应性而备受关注。大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择。

        既然是数据库那么就一定要保证数据的安全,为了实现数据的安全,保证是数据库出现故障数据丢失时可以快速的恢复数据,保证数据的安全,实现一定的容灾功能。这样我们就用到了MySQL数据库的AB复制,MySQL的AB复制又叫做主从复制,就是当主数据库出现问题时可以快速的在从数据库中回复出来之前的数据,保证数据库的正常工作。

        首先对MySQL的主数据库进行设置。主库增加用户,用于丛库读取主库日志 登陆到mysql
[root
@localhost src]#mysql -uroot -p  

mysql>grant replication slave,reload,super on *.* to 'slave'@'192.168.100.45' identified by 'covics123'  

接下来备份Master上的数据,首先执行如下SQL语句: mysql>FLUSH TABLES WITH READ LOCK;   
不要退出这个终端,否则这个锁就不生效;接着导出数据,可以直接打包压缩数据文件   
[root@localhost src]#cd /var/lib/mysql  
tar zcf data.tar.gz ./mysql
然后将这些数据拷贝到Slave服务器上,解开,设置好正确的权限及属主等;之后,执行 "UNLOCK TABLES" 语句来释放锁。  
为了保证事务InnoDB复制设置的最大可能的耐受性和一致性,应在主服务器的my.cnf文件中使用innodb_flush_log_at_trx_commit=1和sync-binlog=1  
InnoDB复制里一个小的**是LOAD TABLE FROM MASTER不对InnoDB类型表起作用。有两种可能的工作区:  
转储主服务器上的表并导入转储文件到从服务器。  
在用LOAD TABLE tbl_name FROM MASTER建立复制之前,在主服务器上使用ALTER TABLE tbl_name TYPE=MyISAM,并且随后使用ALTER TABLE把主表转换回InnoDB。   

        MySQL从数据库的配置,先测试一下从库连接主库
[root@localhostsrc]#mysql –h192.168.100.44 -uslave –p mysql>SHOW GRANTS;     
停从库,修改从库/etc/my.cnf,增加选项: [mysqld] server-id=2
master-host=192.168.100.44 master-user=slave
master-password=covics123  
replicate-ignore-db=mysql       #略过同步的数据库名,如果有多个,请设置多次replicate-do-db = test   #想要同步的数据库名,如果有多个,请设置多次 log-warnings  
启动从库,进行主从库数据同步 [[email protected]]#mysql -uroot -p mysql>start slave;
mysql>load data from master;

        主从数据库都配置完成之后进行一下测试,登陆到主数据库

mysql>use test;
mysql>create table wen (name char(20),phone char(20)); mysql>insert into wen values('abc,'0532555555'); mysql>slect * from wen;   
打开从库,察看: mysql>use new; mysql> show tables;
能看到新建的表wen那就说明已经成功了  
查看mysql的复制状态:show master status\G;


手动复制:
mysql> CHANGE MASTER TO
                ->     MASTER_HOST='master_host_name',                 ->     MASTER_USER='master_user_name',                 ->     MASTER_PASSWORD='master_pass',
                ->     MASTER_LOG_FILE='recorded_log_file_name',               ->     MASTER_LOG_POS=recorded_log_position;
  
MYSQL数据库没有增量备份的机制,所以如果面对比较大的数据量,并且需要时时更新时,我们可以利用mysql提供的replication机制来间接实现增量备份功能。Replication是一种异步复制过程。
Mysql的AB复制方式大致分为4种:常规的一主一从模式、双主模式、一主多从模式、多主多从模式等,可以根据实际情况来搭建环境。本文采用最常规的一主一从的模式。
Mysql的AB复制功能在版本上需要注意,MYSQL的版本都要高于3.2,还有一个基本的原则就是作为从数据库的数据库版本可以高于主服务器数据库的版本,但是不可以低于主服务器的数据库版本。

        由于我们的数据库都是已经建立好了的,所以一定要先备份数据库还原到从数据库服务器,可以采用以下备份主数据库:

mysqldump -uroot -p --opt mastercontrol>mastercontrol.sql  
然后到从服务器先建立一个一样名字的数据库mastercontrol,然后通过脚本还原数据库,命令如下:
mysql -uroot -p mastercontrol<mastercontrol.sql




立即注册!免费学习海量IT技术信息!!
您好!您暂时不能浏览帖子的全部内容,请 登录 | 没有帐号? 注册QQ登录

该用户从未签到

累计在线
150分钟
 楼主| 发表于 2015-2-4 10:10:42 | 显示全部楼层
自己顶一下

立即注册!免费学习海量IT技术信息!!
您好!您暂时不能浏览帖子的全部内容,请 登录 | 没有帐号? 注册QQ登录
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表