Chinaunix首页 | 论坛 | 博客
  • 博客访问: 90905
  • 博文数量: 69
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 697
  • 用 户 组: 普通用户
  • 注册时间: 2014-05-03 23:44
文章分类

全部博文(69)

文章存档

2014年(69)

我的朋友

分类: Mysql/postgreSQL

2014-05-16 23:54:04

复制解决的问题:
(1)数据分布
(2)负载平衡
(3)备份
(4)高可用性和容错
复制如何工作:
(1)master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);
(2)slave将master的binary log events拷贝到它的中继日志(relay log);
(3)slave重做中继日志中的事件,将改变反映它自己的数据。
mysql 主从复制,主主复制 - haibintown - haibintown的博客
中继日志通常会位于OS的缓存中,所以中继日志的开销很小。
 
MySQL主从复制配置
场景描述:
主数据库服务器:192.168.171.158,MySQL已经安装,并且无应用数据。
从数据库服务器:192.168.171.159,MySQL已经安装,并且无应用数据。

一、主服务器上进行的操作
(1)打开二进制日志,指定唯一的servr ID
修改从服务器的配置文件/etc/my.cnf
[mysqld]
log-bin=mysql-bin
server-id=1
重启mysql
service mysqld restart

(2)查询主数据库状态
mysql> show master status\G;
*************************** 1. row ***************************
File: mysql-bin.000001
Position: 106
Binlog_Do_DB: 
Binlog_Ignore_DB:

记录下 FILE 及 Position 的值,在后面进行从服务器操作的时候需要用到。

(3)授权给从数据库服务器192.168.171.159
mysql> GRANT REPLICATION SLAVE ON *.* to 'rep1'@'192.168.171.159' identified by '123123';

二、配置从服务器
(1)修改从服务器的配置文件/etc/my.cnf
server-id = 2
relay-log = mysql-relay-bin
read-only = ON
skip-slave-start = 1
重启mysql
service mysqld restart

说明:skip-slave-start = 1 作用:复制进程就不会随着数据库的启动而启动

(2)执行同步SQL语句
mysql> change master to master_host='192.168.171.158',
master_port=3306,
master_user='rep1',
master_password='123123',
master_log_file='mysql-bin.000001',
master_log_pos=106;

正确执行后启动Slave同步进程
mysql> start slave;

主从同步检查
mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.171.158
                  Master_User: rep1
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 262
               Relay_Log_File: mysql-relay-bin.000002
                Relay_Log_Pos: 407
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           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: 262
              Relay_Log_Space: 562
              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: 
==============================================

其中Slave_IO_Running 与 Slave_SQL_Running 的值都必须为YES,才表明状态正常。

如果主服务器已经存在应用数据,则在进行主从复制时,需要做以下处理:
(1)主数据库进行锁表操作,不让数据再进行写入动作
mysql> FLUSH TABLES WITH READ LOCK;

(2)查看主数据库状态
mysql> show master status;
记录下 FILE 及 Position 的值。
(3)将主服务器的数据文件(整个/opt/mysql/data目录)复制到从服务器,建议通过tar归档压缩后再传到从服务器解压。

(4)取消主数据库锁定
mysql> UNLOCK TABLES;

2.3 验证主从复制效果

主服务器上的操作
在主服务器上创建数据库first_db
mysql> create database first_db;
Query Ok, 1 row affected (0.01 sec)

在主服务器上创建表first_tb
mysql> create table first_tb(id int(3),name char(10));
Query Ok, 1 row affected (0.00 sec)

在主服务器上的表first_tb中插入记录
mysql> insert into first_tb values (001,’myself’);
Query Ok, 1 row affected (0.00 sec)

在从服务器上查看
mysql> show databases;
=============================
+--------------------+
| Database |
+--------------------+
| information_schema |
| first_db |
| mysql |
| performance_schema |
| test |
+--------------------+
5 rows in set (0.01 sec)
=============================
数据库first_db已经自动生成

mysql> use first_db
Database chaged
mysql> show tables;
=============================
+--------------------+
| Tables_in_first_db |
+--------------------+
| first_tb |
+--------------------+
1 row in set (0.02 sec)
=============================
数据库表first_tb也已经自动创建

mysql> select * from first_tb;
=============================
+------+------+
| id | name |
+------+------+
| 1 | myself |
+------+------+
1 rows in set (0.00 sec)
=============================
记录也已经存在

由此,整个MySQL主从复制的过程就完成了

阅读(410) | 评论(0) | 转发(0) |
0

上一篇:某个进程占用cpu异常高

下一篇:关于cron

给主人留下些什么吧!~~