首先说一下mysql主从复制支持哪些方式:
单向,双向,链式级联,实时,异步复制。在复制的时候,一台服务器充当主服务器,而一个或者多个的其他服务器充当从服务器。
一主一从:
一组多从
互为主从
还有什么级联啊,环装啊。这里就不列举了,我们也没有弄过,搞懂其中一个,原理都差不多
其实mysql的主从同步,不是严格的实时的。但是感觉是实时的。后面我会提
算了,不讲废话了。把过程记录下来吧。。。
准备工作:
有两台机器,分别跑两个mysql实例.但是接下来我是在同一台机器上跑的两个实例,和两台机器一样的。(声明。以后的案例我都将会用多实例的方式来搞。)
启动两个实例:
mysqld_safe --defaults-file=/data/3306/my.cnf 2>&1 >/dev/null & (master)
mysqld_safe --defaults-file=/data/3307/my.cnf 2>&1 >/dev/null & (slave)
先看看我们的主库,差不多就下面这些库
在主从之前,先要把主库备份出来,备份出来的东东待会要灌到从库里面去。
mysqldump -uroot -p359359 -S /data/3306/mysql.sock -A -B --events --master-data=2| gzip > rep.sql.gz
然后登陆到主库授权(很重要,千万别忘记了):
grant replication slave on *.* to replication@'localhost' identified by '359359'
flush privileges;
主从同步,主库的操作就这些工作。
接下来从库操作:
首先,将主库备份出来的数据灌到从库
mysql -uroot -p359359 -S /data/3307/mysql.sock < /data/3306/replication.sql
登陆从库:
change master to master_host='192.168.88.229', master_port=3306, master_user='replication', master_password='359359', master_log_file='mysql-bin.000002', master_log_pos=107;
这一步,主要是为同步做准备,开起从库的io进程链接主库的io进程,将二进制日志数据拉取到从库的relay-bin.xxxxxx里面。更新relay-log.info。
其他配置项都很好理解,master_log_file='mysql-bin.000002', master_log_pos=107。这两个的依据,就是在备份主库的时候,会记录下从某个二进制文件之前,某个id之前的都是全背的。比如这个例子中,mysql-bin.000002这个文件中id=107这个之前的数据都是全备份的。这个可以从我们的备份文件中看到。所以备份的时候,要加--master-data=1或者2参数
好了,执行上面的语句如果没有报错的话,那么就剩下最后一步了。
执行start slave。
执行成功以后,查看从库的状态
show slave status\G;
看到图中标红的几个地方。两个yes,一个0.说明同步的IO进程已经正常。从库写数据库的进程正常,落后主库的秒数为0.说明一切正常。
好,那就来验证一下。我们去主库建一个数据库:
去从库。看看,生成了咩的
老铁,没毛病。。。。
实在是J2困了,很多地方估计没有写清楚,有问题留言。我个人也去改一下。
睡觉。困死我了!!!