MySQL 主从复制资料汇总

1,复制原理

官方参考文档:

博客地址1:

博客地址2:

如下图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 手动同步数据

因为当开始搭建的时候,主库上已经有了数据,所以要先把主库已经存在的数据先手动同步迁移到从库上面去。

这里可以用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 |

+——————+———-+————–+————————————————–+——————-+

环境不会改变,解决之道在于改变自己。

MySQL 主从复制资料汇总

相关文章:

你感兴趣的文章:

标签云: