标签:mysql主从
主从介绍MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,两者数据实时同步的
MySQL主从是基于binlog的,主上须开启binlog才能进行主从。 主从过程大致有3个步骤
1)主将更改操作记录到binlog里
2)从将主的binlog事件(sql语句)同步到从本机上并记录在relaylog里
3)从根据relaylog里面的sql语句按顺序执行
主上有一个log dump线程,用来和从的I/O线程传递binlog
从上有两个线程,其中I/O线程用来同步主的binlog并生成relaylog,另外一个SQL线程用来把relaylog里面的sql语句落地
原理很简单。就是从会把主上的binlog搞到从上来,然后生成自己的中继日志,然后再根据中继日志进行更改,最终达到数据一致。
它主要运用的场景是数据备份和在从上读数据减轻主读的压力。
首先在从上安装mysql
首先修改主上的mysql的配置文件my.cnf,在里面增加server-id=ip的尾数和log_bin=binlog的自定义前缀
修改完配置文件后,启动或者重启mysqld服务
这时候在/data/mysql下会生成两个文件,aminglinux1.000001和aminglinux1.index。
其中.index是索引,这个文件必须有。.000001是二进制文件,他是实现主从的根本,他会不断的生成。
下面我们做实验
首先我们先备份一个库
mysqldump -uroot -p19860127 zrlog > /tmp/zrlog.sql
然后创建一个新库
mysql -uroot -e “create database aming”
然后先将刚才备份的数据导入到新建的库中
mysql -uroot aming < /tmp/mysql.sql
创建用作同步数据的用户
grant replication slave on . to ‘repl‘@从的ip identified by ‘password‘;
然后锁表,目的是不让他继续写数据
flush tables with read lock;
+--------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+--------------------+----------+--------------+------------------+-------------------+
| aminglinux1.000001 | 11691 | | | |
+--------------------+----------+--------------+------------------+-------------------+
这里我们要记住file和position,
安装mysql 查看my.cnf,配置server-id=132,要求和主不一样。这里也不用配置log_bin,只有主才需要二进制文件,然后重启。
把主上aming库同步到从上
scp 主ip :/tmp/*.sql /tmp/,输入密码,就可以将主上的数据库复制到从上了。
然后进入mysql,建立一个库create database aming;自定义名名字叫aming。
然后恢复数据库mysql -uroot 库名 < /tmp/库名.sql
这里需要注意的是两边的需要复制的库.sql一定要一致
然后登陆从的mysql,开始主从
首先stop slave;
然后进行 change master to master_host=‘主ip‘, master_user=‘repl‘, master_password=‘主密码‘, master_log_file=‘二进制文件名‘, master_log_pos=Position,
最后进行start slave;
查看主从是否正常
show slave status\G
看是否有 Slave_IO_Running: Yes和Slave_SQL_Running: Yes。如果两个有一个不是yes,这说明主从断开了。
还要到主上执行 unlock tables;
这样主从就搭建完毕
测试主从同步
这些参数可以去my.cnf中去更改
主服务器上 binlog-do-db= //仅同步指定的库,如果是多个,可以用逗号分隔
binlog-ignore-db= //忽略指定库
从服务器上
replicate_do_db=
replicate_ignore_db=
replicate_do_table= 尽量不使用
replicate_ignore_table=尽量不使用
replicate_wild_do_table= //如aming.%, 支持通配符% ,建议使用
replicate_wild_ignore_table=建议使用
标签:mysql主从
原文地址:http://blog.51cto.com/13067688/2117225