码迷,mamicode.com
首页 > 数据库 > 详细

MySQL主从(介绍,配置主机,配置从机,测试主从同步)

时间:2018-01-31 15:39:43      阅读:271      评论:0      收藏:0      [点我收藏+]

标签:rman   tom   etc   pass   replicat   大致   开头   normal   ant   

一、介绍及准备工作

  • 1.介绍

  • MySQL主从配置又叫Replication或者AB复制,简单讲就是A和B两台机器做主从后,在A上写数据,另一台B也会跟着写数据,两台数据实时同步。

  • MySQL主从是基于binlog的,主上须开启binlog才能进行主从。

  • 主从过程大致有3个步骤

  1. 主将更改操作记录到Binlog里

  2. 从将主的Binlog事件(sql语句)同步到从本机上并记录在relaylog里

  3. 从根据relaylog里面的sql语句按顺序执行

  • 主上有一个logdump线程,用来和从的i/o线程传递binlog

  • 从上有两个线程,其中i/o线程用来同步主的binlog并生成relaylog,另外一个SQL线程用来把relaylog里面的sql语句执行一遍。


适用场景:

(1)做数据库数据备份,仅仅是备份,当主机宕机时,马上从机可以代替主机。

(2)还是做数据备份,但是和主机一样,会向web服务器提供服务。但是不能往从机上写数据。



技术分享图片

  • 主从延迟:「步骤2」开始,到「步骤7」执行结束。

  • 步骤 2:存储引擎处理,时间极短

  • 步骤 3:文件更新通知,磁盘读取延迟

  • 步骤 4:Bin Log 文件更新的传输延迟,单线程

  • 步骤 5:磁盘写入延迟

  • 步骤 6:文件更新通知,磁盘读取延迟

  • 步骤 7:SQL 执行时长


Master上 1 个IO线程,负责向Slave传输 binary logbinlog

Slave上 2 个线程:IO 线程执行SQL的线程,其中:

IO线程:将获取的日志信息,追加到relay log上;

执行SQL的线程:检测到relay log中内容有更新,则在Slave上执行sql;

2.准备工作

准备两台机器,上面都要安装MySQL。

MySQL的安装这里就不说了,前面日志会有。

这里经常会出现一个权限问题。因为/data/mysql下的文件所有者和所属组都变成了root。用chmod改成MySQL即可。


二、配置MySQL的主机

1.安装MySQL


2.修改/etc/my.cnf文件,添加以下2段

 server-id=100

 log_bin=litongyao1              (生成binlog,litongyao1是他的文件开头) 

重新启动mysql

[root@zhuji ~]# /etc/init.d/mysqld restart 

接下来我们查看/data/mysql下,

[root@zhuji ~]# ll /data/mysql/

总用量 110700

-rw-rw----. 1 mysql mysql       56 11月 30 14:48 auto.cnf

-rwxr-xr-x. 1 mysql mysql 12582912 12月 29 13:59 ibdata1

-rwxr-xr-x. 1 mysql mysql 50331648 12月 29 13:59 ib_logfile0

-rwxr-xr-x. 1 mysql mysql 50331648 11月 30 14:15 ib_logfile1

drwx------. 2 mysql mysql       62 12月 28 21:01 java_test

-rw-rw----. 1 mysql mysql      120 12月 29 13:59 litongyao1.000001

-rw-rw----. 1 mysql mysql      143 12月 29 13:59 litongyao1.000002

-rw-rw----. 1 mysql mysql      120 12月 29 13:59 litongyao1.000003

-rw-rw----. 1 mysql mysql       60 12月 29 13:59 litongyao1.index

drwxr-xr-x. 2 mysql mysql     4096 12月 19 17:05 mysql

drwxr-xr-x. 2 mysql mysql     4096 11月 30 14:15 performance_schema

drwx------. 2 mysql mysql       50 12月 19 17:50 rxr

drwxr-xr-x. 2 mysql mysql        6 11月 30 14:14 test

-rw-rw----. 1 mysql mysql    73149 12月 29 13:59 zhuji.err

-rw-rw----. 1 mysql mysql        5 12月 29 13:59 zhuji.pid

drwx------. 2 mysql mysql     4096 12月 28 20:17 zrlog


3.把mysql库备份并恢复成litongyao库,作为测试数据

[root@zhuji ~]# mysqldump -uroot -paminglinux rxr > /tmp/rxr.sql

[root@zhuji ~]# ll /tmp/rxr.sql 

-rw-r--r--. 1 root root 1780 12月 29 14:27 /tmp/rxr.sql

[root@zhuji ~]# mysql -uroot -paminglinux -e "create database litongyao"

[root@zhuji ~]# mysql -uroot -paminglinux litongyao < /tmp/rxr.sql 


4.创建MySQL用户用作同步数据

mysql> grant replication slave on *.* to 'repl'@'192.168.52.100' identified by 'rxr123456';

Query OK, 0 rows affected (0.00 sec)


mysql> flush tables with read lock;

Query OK, 0 rows affected (0.00 sec)


mysql> show master status;                   (这里要记住binlog的名字file,还有它的位置Position)         

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

| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

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

| litongyao1.000003 |     1029 |        |            |             |

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

1 row in set (0.00 sec)


[root@zhuji ~]# mysqldump -uroot -paminglinux zrlog > /tmp/zrlog.sql

Warning: Using a password on the command line interface can be insecure.


三、配置从机

  1. 安装MySQL

  2. 查看my.cnf,配置server-id,要求和主不一样。

server-id=101

3.重新启动MySQL服务

[root@congji ~]# /etc/init.d/mysqld restart

Shutting down MySQL.. SUCCESS! 

Starting MySQL.. SUCCESS!

4.把主上的litongyao库同步到从上

(1)把备份的库文件用scp到从机上

[root@congji ~]# scp 192.168.52.101:/tmp/*.sql /tmp/

root@192.168.52.101's password: 

rxr.sql          100% 1780     1.7KB/s   00:00    

zrlog.sql         100% 9886     9.7KB/s   00:00    

(2)创建相应的数据库

mysql> create database rxr;

Query OK, 1 row affected (0.00 sec)

mysql> create database zrlog;

Query OK, 1 row affected (0.00 sec)

(3)把备份的库恢复到从机上,保证主从2边数据库一致

[root@congji bin]# mysql -uroot zrlog < /tmp/zrlog.sql 

[root@congji bin]# mysql -uroot rxr < /tmp/rxr.sql

(4)停止主从同步

mysql> stop slave;

Query OK, 0 rows affected, 1 warning (0.00 sec)

(5)接下来就是最重要的一步操作,在从机上配置主机的ip,用户名,密码,binlog的name以及pos。

mysql> change master to master_host='192.168.52.101', master_user='repl', master_password='rxr123456', master_log_file='litongyao1.000003', master_log_pos=1029;

Query OK, 0 rows affected, 2 warnings (0.01 sec)

(6)开启主从同步

mysql> start slave;

Query OK, 0 rows affected (0.01 sec)

(7)查看主从有没有配置成功    (查看是否有两个yes)

mysql> show slave status\G;

*************************** 1. row ***************************

               Slave_IO_State: Waiting for master to send event

                  Master_Host: 192.168.52.101

                  Master_User: repl

                  Master_Port: 3306

                Connect_Retry: 60

              Master_Log_File: litongyao1.000003

          Read_Master_Log_Pos: 1029

               Relay_Log_File: congji-relay-bin.000002

                Relay_Log_Pos: 284

        Relay_Master_Log_File: litongyao1.000003

             Slave_IO_Running: Yes

            Slave_SQL_Running: Yes


(8)解锁主机上的表,让它恢复写的操作

(主机:192.168.52.101)

mysql> unlock tables;

Query OK, 0 rows affected (0.00 sec)


四、测试主从同步

几个配置参数:在/etc/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> use rxr;

Database changed

mysql> show tables;

Empty set (0.00 sec)

从机:

mysql> use rxr;

Database changed

mysql> show tables;

Empty set (0.00 sec)


增加一个表:

主机:

mysql> create table lty(`id`int(4),`name`char(40));

Query OK, 0 rows affected (0.06 sec)


mysql> show tables;

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

| Tables_in_rxr |

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

| lty       |

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

1 row in set (0.00 sec)


从机:

cremysql> show tables;

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

| Tables_in_rxr |

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

| lty           |

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

1 row in set (0.00 sec)

增加表实现主从同步。


删除表:

主机:

mysql> drop table lty;

Query OK, 0 rows affected (0.26 sec)


mysql> show tables;

Empty set (0.00 sec)


从机:

mysql> show tables;

Empty set (0.00 sec)


删除表也实现了主从同步。



三、如果误操作,导致主从同步异常,怎么办?

最重要的一步就是马上关闭主从同步:

stop slave;

接着马上做一步操作:

change master to master_host='', master_user='repl', master_password='', master_log_file='', master_log_pos=xx,

接着打开主从同步:

start slave;

然后查看是否恢复正常。



MySQL主从(介绍,配置主机,配置从机,测试主从同步)

标签:rman   tom   etc   pass   replicat   大致   开头   normal   ant   

原文地址:http://blog.51cto.com/13407306/2067289

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!