mysql 同一秒入库问题_Mysql的备份和AB复制

Mysql 的完全备份

有2种方式1 使用系统命令直接将Mysql数据拷贝进行备份

例如

/etc/init.d/mysqld stop

tar cvfz /var/lib/mysql/mydb_backup.tar.gz /tmp

/etc/init.d/mysqld start

此种方法必须要先关闭Mysql服务,这也是一大弊端,而且此备份出的数据不支持不同版本的Mysql进行恢复!

所以此法生产环境中很少用

2 使用mysqldump 进行备份mysqldump 备份的原理是,将对数据库中的内容修改所生成的sql 语句保存指定位置;恢复时只要将该sql 语句文件导出交给新mysql 重新执行一次,实现恢复数据。例如

mysqldump -u root -p 123 > /var/test/123.sql

如果需要备份mysql 中的所有数据库,使用 -all-databases

mysqldump -u root -p --all-databases > /var/test/123.sql

恢复数据的命令如下:

mysql -u root -p 123 < /var/test/123.sql

mysql 的增量备份增量备份是比完全备份作的频率高的多的操作;mysql 的增量备份使用的方法的是用过mysql 的二进制日志来实现的;mysql 的二进制日志中保存了对mysql 的所有操作sql 语句;mysql 的二进制日志功能默认是关闭着的,我们需要自己手动去打开;vim /etc/my.cnf 编辑添加log-bin=noah(台头) 如果不加台头则默认为binlog;重新启动服务后就会在/var/lib/mysql 中发现binlog 二进制文件;二进制的日志文件我们需要使用命令mysqlbinlog 来查看;那么,如何使用二进制文件来恢复数据呢;1 使用时间来恢复例如mysqlbinlog --start-date="2009-05-20 10:51:01" --stop-date="2009-05-20 11:52:12" /var/lib/mysql/binlog.000001 | mysql -uroot -p123456

将这2段时间之间对mysql 进行操作的sql 语句输出给mysql 执行;这样就恢复这段时间内的数据;但是这里的时间只精确到秒,那么在同一秒内有许多sql 语句的话,就会出现问题了;因此,我们引入了更加精确的恢复的方法,如下;

2 使用位置号来恢复例如mysqlbinlog --start-position="457" --stop-position="1009" /var/lib/mysql/binlog.000001 | mysql -uroot -p123456

在mysql 二进制日志中会设定一个唯一的log_pos;我们就利用这个唯一的position 进行恢复数据的操作;这种方法不会忽略掉任何的数据;

mysql 的AB 复制mysql 的复制主要分为2种:1 同步复制——mysql-cluster2 异步复制——mysql-m/s(主从复制)又称为双击热备,mysql replication这里我们主要讲的是异步复制;主要原理是slave 请求连接master;master 开启1个线程将自己的二进制文件传输给slave ;slave 开启两个线程,1个线程用于I/O,另外一个线程执行master 的binlog 中sql 语句,对库进行同样的操作;从而达到同步的目的。下面以实验介绍异步复制:主库 192.168.0.1 从库 192.168.0.2首先先配置一个单向的热备;

主库配置:step 1 修改/etc/my.cnfvim /etc/my.cnf 添加log-bin=noah 打开二进制文件功能server-id=1 为了与从库的区分开step 2 授权用户mysql -uroot -p123456 进入mysqlgrant replication slave,reload,super on *.* to slave@192.168.0.2 identified by "123456";flush privileges;建立完用户后,可以在从库主机上测试登录mysql -uslave -p123456 -h192.168.0.1能登录则说明用户建立成功了。step 3 与从库的初始化同步完全备份主库的数据库mysqldump -uroot -p --all-databases > /tmp/alldb_bak.sql将该文件复制到从库scp /tmp/alldb_bak.sql 192.168.0.2:/tmp在从库上恢复数据mysql -uroot -p < /tmp/alldb_bak.sql

从库配置:step 1 停止mysqlservice mysqld stopstep 2 修改/etc/my.cnf添加如下server-id=2master-host=192.168.0.1master-user=slavemaster-password=123456step 3 启动mysqlservice mysqld startstep 4 进行数据同步slave start;可以使用show slave status \G; 来查看slave 的状态;如果2个线程都为yes,说明成功了。这样,单向的热备就配置好了。测试一下,在主库创建一个新表;create databases new;在从库上show databases; 看到new 则说明成功了。接下来2台主机互做主从复制,安装discuz 论坛;实现一台主机发帖另一台上能看到。step 1 二台机器安装以上的方法同时做主库与从库;步骤同上;step 2 在主库上安装discuz 论坛具体步骤如下,摘自web服务与LAMP本实验的主要rpm 包和tar 包为:apache   httpd-2.2.3-11.el5.i386.rpmhttpd-devel-2.2.3-11.el5.i386.rpmmysql     mysql-5.0.22-2.1.0.1.i386.rpmmysql-server-5.0.22-2.1.0.1.i386.rpmphp         php-5.1.6-15.el5.i386.rpmphp-mysql-5.1.6-15.el5.i386.rpmdiscuz.tar.gzZendOptimizer-3.3.0a-linux-glibc21-i386.tar.gz安装好所有rpm 包,LAMP环境即构建完成。随后我们配置MySql首先重新启动mysql 服务 service mysql restart然后 输入mysql,按如下配置mysql> create database discuz;Query OK, 1 row affected (0.01 sec)mysql> grant all on discuz.* to red@localhost identified by '123456';Query OK, 0 rows affected (0.00 sec)mysql> flush privileges-> ;Query OK, 0 rows affected (0.00 sec)退出,配置完成之后把ZendOptimizer-3.3.0a-linux-glibc21-i386.tar.gz 解压出来 运行里面的install.sh脚本 ,采用回车大法,将程序安装完。最后解压discuz.tar.gz 包 将解压出来的upload 移动到/var/www/html下并改名为bbs,将html目录的拥有者和拥有组都改为apache,方便随后的安装。重启httpd服务在浏览器中输入192.168.0.1/bbs/install.php开始安装,填写相关内容后,安装完成step 3 互相启动mysql 后,slave start,同步后192.168.0.2 也有了discuz 数据库;为其授权一个用户;grant all on discuz.* to red@localhost identified by '123456';flush privileges;step 4 复制192.168.0.1机器上的/var/www/html/bbs 给192.168.0.2;用scp -rp 轻松实现;step 5 访问自己的discuz;192.168.0.1/bbs 192.168.0.2/bbs;各自在上面发帖;互相都能够看到对方的帖子则说明配置成功了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值