一、复制介绍

MySQL支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器的日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。

请注意当你进行复制时,所有对复制中的表的更新必须在主服务器上进行。否则,你必须要小心,以避免用户对主服务器上的表进行的更新与对从服务器上的表所进行的更新之间的冲突。

单向复制有利于健壮性、速度和系统管理:

•主服务器/从服务器设置增加了健壮性。主服务器出现问题时,你可以切换到从服务器作备份。

•通过在主服务器和从服务器之间切分处理客户查询的负荷,可以得到更好的客户响应时间。SELECT查询可以发送到从服务器以降低主服务器的查询处理负荷。但修改数据的语句仍然应发送到主服务器,以便主服务器和从服务器保持同步。如果非更新查询为主,该负载均衡策略很有效,但一般是更新查询。

•使用复制的另一个好处是可以使用一个从服务器执行备份,而不会干扰主服务器。在备份过程中主服务器可以继续处理更新。

MySQL提供了数据库的同步功能,这对我们事先数据库的容灾、备份、恢复、负载均衡等都是有极大帮助的。

二、实验环境

操作系统:RHEL 5.4 X86

mysql:5.5.22版本

master机器名:node2      IP:192.168.1.152

slave机器名:node1         IP:192.168.1.151

三、MySQL主从模式

注意Mysql数据库的版本,两个数据库版本要相同,或者slave比master版本低!

3.1、通过源码安装mysql

此处过程略,可以参考<Mysql 源码安装>!

3.2、Master端:

3.2.1、创建目录

 [root@node2 ~]# mkdir -p /var/log/mysql
[root@node2 ~]# chown -R mysql:mysql /var/log/mysql //创建更新目录并赋予mysql用户权限

3.2.2、修改配置文件:

 [root@node2 mysql]# vi my.cnf               //编辑配置文件增加以下内容
log-bin=mysql-bin //启动二进制日志系统
binlog-do-db=node1
binlog-do-db=node2 //二进制需要同步的数据库名 如果有多个数据库,每个数据库一行
server-id = 1 //本机数据库ID
log-bin=/var/log/mysql/updatelog //设定生成log文件名,这里的路径没有mysql目录要手动创建并给于它mysql用户的权限
binlog-ignore-db=mysql //避免同步mysql用户配置,以免不必要的麻烦

3.2.3、创建用于同步的用户:

 mysql> GRANT REPLICATION SLAVE,REPLICATION CLIENT,RELOAD,SUPER ON *.* TO 'replication'@'192.168.1.151' IDENTIFIED BY '';
Query OK, 0 rows affected (0.00 sec) //给从服务器用户replication 的同步权限 mysql> Grant ALL PRIVILEGES ON node1.* TO replication@'%' IDENTIFIED BY ''; //创建用户replication,密码123456,允许所有用户访问数据库node1,并刷新权限
Query OK, 0 rows affected (0.00 sec) mysql> Grant ALL PRIVILEGES ON node2.* TO replication@'%' IDENTIFIED BY '';
Query OK, 0 rows affected (0.00 sec)

3.2.4、复制数据到从库:

 mysql> create database node1;
Query OK, 1 row affected (0.00 sec) mysql> create database node2;
Query OK, 1 row affected (0.00 sec) mysql> use node1;
Database changed
mysql> create table node1 (id char) engine=myisam;
Query OK, 0 rows affected (0.01 sec) mysql> insert into node1 values(1);
Query OK, 1 row affected (0.00 sec) mysql> commit;
Query OK, 0 rows affected (0.00 sec) mysql> exit;
Bye
[root@node2 app]# service mysql stop;
Shutting down MySQL... [ OK ] [root@node2 data]# tar -cvf db.tar node1 node2
node1/
node1/node1.MYI
node1/db.opt
node1/node1.frm
node1/node1.MYD
node2/
node2/db.opt
[root@node2 data]# ll
total 30140
-rw-r--r-- 1 root root 20480 Nov 13 19:29 db.tar [root@node2 data]# scp db.tar node1:/app/mysql/data/
db.tar 100% 20KB 20.0KB/s 00:00 [root@node2 data]# service mysql start
Starting MySQL.. [ OK ] [root@node2 data]# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.5.22-log Source distribution Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| updatelog.000001 | 107 | node1,node2 | mysql |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

3.3、Slave端:

3.3.1、修改配置文件:

 [root@node1 data]# vi ../my.cnf
server-id = 2 //从服务器ID号
#master_host=192.168.1.152 //主服务器地址
#master_user=replication //指定在主服务器上可以进行同步的用户名
#master_password=123456 //密码
#master-port=3306 //端口号
#master-connect-retry=60 //断点重连时间
replicate-ignore-db=mysql //屏蔽对mysql库的同步,以免有麻烦
replicate-do-db=node1 //同步数据库名称
replicate-do-db=node2
----由于5.3以后不支持master_host参数等,因此下面采用change master to的方式

3.3.2、装载主服务器数据库:

[root@node1 data]# tar -xvf db.tar
node1/
node1/node1.MYI
node1/db.opt
node1/node1.frm
node1/node1.MYD
node2/
node2/db.opt
[root@node1 data]# chown -R mysql:mysql node1
[root@node1 data]# chown -R mysql:mysql node2
[root@node1 data]# service mysql restart
Starting MySQL [ OK ]

3.3.3、同步数据:

mysql> slave stop
-> ;
Query OK, 0 rows affected (0.01 sec) mysql> change master to master_host='192.168.1.152', master_user='replication', master_password='';
Query OK, 0 rows affected (0.01 sec) mysql> slave start;
Query OK, 0 rows affected (0.00 sec) mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.152
Master_User: replication
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: updatelog.000001
Read_Master_Log_Pos: 107
Relay_Log_File: node1-relay-bin.000002
Relay_Log_Pos: 253
Relay_Master_Log_File: updatelog.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: node1,node2
Replicate_Ignore_DB: mysql
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 107
Relay_Log_Space: 409
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
1 row in set (0.00 sec) ERROR:
No query specified mysql> use node1;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A Database changed
mysql> show tables;
+-----------------+
| Tables_in_node1 |
+-----------------+
| node1 |
+-----------------+
1 row in set (0.00 sec) mysql> select * from node1;
+------+
| id |
+------+
| 1 |
+------+
1 row in set (0.00 sec)

3.4、测试数据

----主库端操作
mysql> use node1;
Database changed
mysql> insert into node1 values(2);
Query OK, 1 row affected (0.01 sec) mysql> commit;
Query OK, 0 rows affected (0.00 sec) mysql> use node2;
Database changed
mysql> create table node2 (id char);
Query OK, 0 rows affected (0.01 sec) ----备库端查询
mysql> select * from node1;
+------+
| id |
+------+
| 1 |
| 2 |
+------+
2 rows in set (0.00 sec) mysql> use node2;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A Database changed
mysql> show tables;
+-----------------+
| Tables_in_node2 |
+-----------------+
| node2 |
+-----------------+
1 row in set (0.00 sec)

 四、MySQL主主模式:

思路,互为对方的从服务器,每台服务器即是对方的主服务器,又是对方的从服务器。

在这里就省略了!

MYSQL的主从和主主复制模式的更多相关文章

  1. MySQL Replication, 主从和双主配置

    MySQL Replication, 主从和双主配置 MySQL的Replication是一种多个MySQL的数据库做主从同步的方案,特点是异步,广泛用在各种对MySQL有更高性能,更高可靠性要求的场 ...

  2. mysql传统主从、双主复制+keepalived配置步骤

    mysql主从.主主复制(双主复制)配置步骤 一:MySQL复制: MySQL复制简介: 将master服务器中主数据库的ddl和dml操作通过二进制日志传到slaves服务器上,然后在master服 ...

  3. mysql的主从配置以及主主配置

    基础环境 系统:linuxmysql版本:5.5主服务器IP:192.168.1.101从服务器IP:192.168.1.102 1.主服务器(master)要打开二进制日志2.从服务器(slave) ...

  4. MySQL实现主从库,AB复制配置

    AB复制是一种数据复制技术,是myslq数据库提供的一种高可用.高性能的解决方案. AB复制的模式:一主一从 .一主多从.双主.多主多从 复制的工作原理:要想实现ab复制,那么前提是master上必须 ...

  5. MySQL复制环境(主从/主主)部署总结性梳理

    Mysql复制概念说明Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves) ...

  6. Mysql主从同步(1) - 概念和原理介绍 以及 主从/主主模式 部署记录

    Mysql复制概念Mysql内建的复制功能是构建大型高性能应用程序的基础, 将Mysql数据分布到多个系统上,这种分布机制是通过将Mysql某一台主机数据复制到其它主机(slaves)上,并重新执行一 ...

  7. 搭建MySQL的主从、半同步、主主复制架构

    复制其最终目的是让一台服务器的数据和另外的服务器的数据保持同步,已达到数据冗余或者服务的负载均衡.一台主服务器可以连接多台从服务器,并且从服务器也可以反过来作为主服务器.主从服务器可以位于不同的网络拓 ...

  8. MySQL集群搭建(2)-主主从模式

    1 环境准备 上次我们搭建了主备架构,如下所示 这次我们的搭建目标是 具体配置信息 IP 系统 端口 MySQL版本 节点 读写 说明 192.168.41.83 Centos6.8 3306 5.7 ...

  9. mysql 主从,主主,主主复制时的主键冲突解决

    原理:slave 的i/o thread ,不断的去master抓取 bin_log, 写入到本地relay_log 然后sql thread不断的更新slave的数据 把主服务器所有的数据复制给从服 ...

随机推荐

  1. linux下如何启动/停止/重启mysql:

    一.启动方式1.使用linux命令service 启动:service mysqld start2.使用 mysqld 脚本启动:/etc/inint.d/mysqld start3.使用 safe_ ...

  2. Spring Boot 1 创建Demo

    Spring Boot的主要优点: 为所有Spring开发者更快的入门 开箱即用,提供各种默认配置来简化项目配置 内嵌式容器简化Web项目 没有冗余代码生成和XML配置的要求 入门操作: 1.打开ht ...

  3. RFS一些基本概念

    1. Project.Directory.TestSuit.TestCase.Resource的区别?   Project:项目名称   Directory:对项目进行分层   TestSuit:测试 ...

  4. 使用awk统计字段重复实践

    awk awk是一种规格化文件的分析工具, 主要处理对象类似数据库导出的条目文本文件, 其中一行,就对应一个记录,每个记录包含若干个字段. 类似这种文本: [root@www ~]# last -n ...

  5. weblogic对jms实现的QueueConnection实现与TopicConnection实现问题

    今天看了一段之前同事写jms的代码,觉得好像不对,但是不可能,生产上用的代码.刚开始想了下,脑子没转过弯来,后来一想是个简单的问题 代码如下: topicConnection = (TopicConn ...

  6. 查看oracle数据库中的保留字

    SQL> select * from v$reserved_words;

  7. SignalR实时聊天功能

    使用vs2013新建一个空的asp.net 工程 添加SignalR集线器类MyHub.cs using System; using System.Collections.Generic; using ...

  8. 转:Apache POI Tutorial

    Welcome to Apache POI Tutorial. Sometimes we need to read data from Microsoft Excel Files or we need ...

  9. With as 递归查询

    use TEST create table Provinces ( pro_Id ,), pro_Name nvarchar(), pro_Code nvarchar(), pro_PId int ) ...

  10. [原创] 分享一些linux教程

    书<鸟哥的linux私房菜第三版>,链接:http://pan.baidu.com/s/1i3femnr 配套视频,链接:http://pan.baidu.com/s/1v72xw --- ...