MYSQL的主从和主主复制模式
一、复制介绍
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的主从和主主复制模式的更多相关文章
- MySQL Replication, 主从和双主配置
MySQL Replication, 主从和双主配置 MySQL的Replication是一种多个MySQL的数据库做主从同步的方案,特点是异步,广泛用在各种对MySQL有更高性能,更高可靠性要求的场 ...
- mysql传统主从、双主复制+keepalived配置步骤
mysql主从.主主复制(双主复制)配置步骤 一:MySQL复制: MySQL复制简介: 将master服务器中主数据库的ddl和dml操作通过二进制日志传到slaves服务器上,然后在master服 ...
- mysql的主从配置以及主主配置
基础环境 系统:linuxmysql版本:5.5主服务器IP:192.168.1.101从服务器IP:192.168.1.102 1.主服务器(master)要打开二进制日志2.从服务器(slave) ...
- MySQL实现主从库,AB复制配置
AB复制是一种数据复制技术,是myslq数据库提供的一种高可用.高性能的解决方案. AB复制的模式:一主一从 .一主多从.双主.多主多从 复制的工作原理:要想实现ab复制,那么前提是master上必须 ...
- MySQL复制环境(主从/主主)部署总结性梳理
Mysql复制概念说明Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves) ...
- Mysql主从同步(1) - 概念和原理介绍 以及 主从/主主模式 部署记录
Mysql复制概念Mysql内建的复制功能是构建大型高性能应用程序的基础, 将Mysql数据分布到多个系统上,这种分布机制是通过将Mysql某一台主机数据复制到其它主机(slaves)上,并重新执行一 ...
- 搭建MySQL的主从、半同步、主主复制架构
复制其最终目的是让一台服务器的数据和另外的服务器的数据保持同步,已达到数据冗余或者服务的负载均衡.一台主服务器可以连接多台从服务器,并且从服务器也可以反过来作为主服务器.主从服务器可以位于不同的网络拓 ...
- MySQL集群搭建(2)-主主从模式
1 环境准备 上次我们搭建了主备架构,如下所示 这次我们的搭建目标是 具体配置信息 IP 系统 端口 MySQL版本 节点 读写 说明 192.168.41.83 Centos6.8 3306 5.7 ...
- mysql 主从,主主,主主复制时的主键冲突解决
原理:slave 的i/o thread ,不断的去master抓取 bin_log, 写入到本地relay_log 然后sql thread不断的更新slave的数据 把主服务器所有的数据复制给从服 ...
随机推荐
- 压测 502 日志报错 upstream timed out (110: Connection timed out)
环境介绍 服务器:centos6.5服务:nginx proxy 问题描述: 压测 开发同事 的开发环境项目没事,但是 线上机器 命中%50 ,大量502 php的某些页面打不开,页面提示gatewa ...
- 随机数产生random
随机数产生推荐用random(),在产生随机数前要添加种子srandom((unsigned int)time(NULL)). SYNOPSIS #include <stdlib.h> l ...
- 分享书籍[writing idiomatic python ebook] 二
对多个变量设置相同的值时,用连等号一起赋值 x = 10 y = 10 z = 10 改成: x = y = z = 10 交换变量值时,可以避免定义新的临时变量 x = 10 y = 5 temp ...
- 做IT不能一辈子只靠技术生存
在中国你千万不要以为学习技术就可以换来稳定的生活和高的薪水待遇,你千万更不要认为哪些从事市场开发,跑腿的人,没有前途. 不知你是不是知道,咱们中国有相当大的一部分软件公司,他们的软件开发团队都小的可怜 ...
- HTML是什么
HTML(Hyper Text Mark-up Language )即超文本标记语言,是 WWW 的描述语言,由 Tim Berners-lee提出.设计 HTML 语言的目的是为了能把存放在一台电脑 ...
- datagridview自动增加行高度和显示全部内容
this.dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCellsExceptHeaders; //自动调动dat ...
- weka特征选择(IG、chi-square)
一.说明 IG是information gain 的缩写,中文名称是信息增益,是选择特征的一个很有效的方法(特别是在使用svm分类时).这里不做详细介绍,有兴趣的可以googling一下. chi-s ...
- Lintcode: Rehashing
The size of the hash table is not determinate at the very beginning. If the total size of keys is to ...
- 趣谈PHP 多态
多态性是指相同的操作或函数.过程可作用于多种类型的对象上并获得不同的结果.不同的对象,收到同一消息将可以产生不同的结果,这种现象称为多态性. 多态性允许每个对象以适合自身的方式去响应共同的消息.多态性 ...
- PHP和JS实现多按钮提交表单
JS: <html> <head> <script> function submitit1() //交由程序1处理 { document.myForm.action ...