设为首页 加入收藏

TOP

MySQL主从复制资料汇总(一)
2015-07-24 10:18:37 来源: 作者: 【 】 浏览:0
Tags:MySQL 主从 复制 资料 汇总

1,复制原理

如下图1.png所示:

\

?

?

该过程的第一部分就是master记录二进制日志。在每个事务更新数据完成之前,master在二日志记录这些改变。MySQL将事务串行的写入二进制日志,即使事务中的语句都是交叉执行的。在事件写入二进制日志完成后,master通知存储引擎提交事务。

?

下一步就是slave将master的binary log拷贝到它自己的中继日志。首先,slave开始一个工作线程——I/O线程。I/O线程在master上打开一个普通的连接,然后开始binlog dump process。Binlog dump process从master的二进制日志中读取事件,如果已经跟上master,它会睡眠并等待master产生新的事件。I/O线程将这些事件写入中继日志。

?

SQLslave thread(SQL从线程)处理该过程的最后一步。SQL线程从中继日志读取事件,并重放其中的事件而更新slave的数据,使其与master中的数据一致。只要该线程与I/O线程保持一致,中继日志通常会位于OS的缓存中,所以中继日志的开销很小。

?

此外,在master中也有一个工作线程:和其它MySQL的连接一样,slave在master中打开一个连接也会使得master开始一个线程。复制 过程有一个很重要的限制——复制在slave上是串行化的,也就是说master上的并行更新操作不能在slave上并行操作。

?

2,mysql主从同步应用场景

(1):数据分布

(2):负载均衡

(3):备份

(4):高可用和容错

?

3,搭建mysql主从的环境要求

主从系统要保持一致:包括数据库版本,操作系统版本,磁盘IO磁盘容量,网络带宽等。

[root@data02 ~]# cat /etc/redhat-release

CentOS release 6.2 (Final)

[root@data02 ~]#

?

主库master

从库slave

OS系统版本

CentOS release 6.2 (Final)

CentOS release 6.2 (Final)

数据库版本

5.6.12-log

5.6.12-log

磁盘容量

50G

30G

主机ip地址

192.168.52.129

192.168.52.130

端口

3306

3306

内存

1G

1G

服务器类型

虚拟机

虚拟机

?

?

4,开始搭建mysql主从复制

4.1建立复制账号

?

GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.*TO repl@'192.168.52.130' IDENTIFIED BY 'repl_1234';

建立一个复制账号,只允许从192.168.52.130上来访问登录主库进行二进制日志传输同步。PS:如果mysql版本新旧密码算法不同,可以设置set password for 'backup'@'10.100.0.200'=old_password('1234'))

?

4.2 手动同步数据

因为当开始搭建的时候,主库上已经有了数据,所以要先把主库已经存在的数据先手动同步迁移到从库上面去。搭建过程中,禁止在主库从库上进行任何对数据库的ddl、dml等数据操作。

这里可以用mysqldump也可以用xtrabackup导出主库上面的数据:

(4.2.1):xtrabackup方式

在主库上192.168.52.129上面进行数据备份,备份命令,要添加--safe-slave-backup参数:

innobackupex --user=backup--password="123456" --host=192.168.52.129 --socket=/tmp/mysql.sock--defaults-file=/etc/my.cnf /data/backups/mysql/repl/backup_slave --parallel=3--safe-slave-backup --no-timestamp

去备份目录/data/backups/mysql/repl/backup_slave查看备份时候的主库二进制信息,需要根据这个二进制信息来进行数据同步,如下所示:

[root@data01 test]# cd/data/backups/mysql/repl/backup_slave

[root@data01 backup_slave]# more xtrabackup_binlog_info

mysql-bin.000147 120

[root@data01 backup_slave]#

压缩备份文件并且传输到从库192.168.52.130上面:

tar -zcvf backup_slave.tar.gz backup_slave/

scp backup_slave.tar.gz192.168.52.130:/tmp/

(4.2.2)mysqldump方式

在主库上192.168.52.129上做基于主库做数据备份

/usr/local/mysql/bin/mysqldump -ubackup--password=123456 --host=192.168.52.129 --single-transaction --flush-logs --master-data=2 --add-drop-table--create-option --quick --extended-insert=false --set-charset --disable-keys -A> /tmp/alldb.sql

压缩备份文件,传输到从库192.168.52.130上面去。

gzip /tmp/alldb.sql

scp /tmp/alldb.sql.gz 192.168.52.130:/tmp/

4.3 配置master库(192.168.52.129)

Vim /etc/my.cnf

server-id=129 # Server ID

log-bin =/home/data/mysql/binlog/mysql-bin

binlog-ignore-db=mysql # No sync databases

binlog-ignore-db=test # No sync databases

binlog-ignore-db=information_schema # No sync databases

binlog-ignore-db=performance_schema

binlog-do-db=user_db

?

保存退出,重启mysql主库,可以查看主库的状态,如下:

mysql> show master status;

+------------------+----------+--------------+--------------------------------------------------+-------------------+

| File | Position | Binlog_Do_DB |Binlog_Ignore_DB | Executed_Gtid_Set |

+------------------+----------+--------------+-----------
首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇MySQL事务学习 --> 分布式事务 下一篇mysql索引的设计和使用

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Python 数据分析与可 (2025-12-26 21:51:20)
·从零开始学Python之 (2025-12-26 21:51:17)
·超长干货:Python实 (2025-12-26 21:51:14)
·为什么 Java 社区至 (2025-12-26 21:19:10)
·Java多线程阻塞队列 (2025-12-26 21:19:07)