mysql port on ubuntu_MySQL 复制 on Ubuntu12.04

一、简介

MySQL 复制(Replication)基于binnary logging机制,将数据在master和slave之间同步。无论机制、配置、运行维护都比MSSQL2000的复制简单稳定很多(mssql2000之后的版本没用过)。

Mysql master将数据更新、变化作为事件写入binary log,Mysql slave读取binary log的事件并将相同的更新、变化写入自己的数据库。

Master只管自己写binary log,不用照看slave。Slave只要在线,数据即可持续同步;即使slave离线,恢复在线后可以继续执行未完成的复制。这一点非常适合进行数据备份,因为在slave上备份丝毫不影响master的运行。

Master可以有多个slaves,slave也可以同时作为master并且拥有自己的slaves。

每一个master和slave必须在my.cnf中指定唯一的 server-id。

在slave上,复制可以随时使用简单的指令停止、恢复。

binary log有三种格式:STATEMENT,ROW,MIXED。STATEMENT格式基于SQL语句,性能高但不支持某些SQL语句;ROW格式基于行,能克服STATEMENT格式的缺点但会产生较大的日志;MIXED结合二者特点,默认使用STATEMENT,当STATEMENT格式不适用时自动转为ROW格式。推荐MIXED,可以在Master的my.cnf中设定此参数。

二、设置Mysql复制非常简单,场景如下。

OS:Ubuntu12.04 X86_64

Master:主机名 mysql-0,IP 192.168.150.200

Slave: 主机名 mysql-1,IP 192.168.150.204

1、在Master上:

编辑文件/etc/mysql/my.cnf 确保有如下几行(后3行是InnoDB引擎必须的,建议加上)

[mysqld]

bind-address=0.0.0.0

server-id=1

log-bin=mysql-binary-log   #这个名字自己随便起

binlog_format=MIXED

innodb_fast_shutdown=0

innodb_flush_log_at_trx_commit=1

sync_binlog=1

然后重启Master的mysql server。

创建一个用户

mysql> create user 'repl'@'192.168.150.200' identified by 'pass4repl';

mysql> grant replication slave on *.* to 'repl'@'192.168.150.200';

为slave获得binary log坐标,首先要使数据库暂时只读,执行:

mysql> FLUSH TABLES WITH READ LOCK;

此终端窗口不动,另外打开一个终端窗口连接到mysql server,执行:

mysql> SHOW MASTER STATUS;

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

| File                    | Position | Binlog_Do_DB | Binlog_Ignore_DB |

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

| mysql-binary-log.000001 |      106 |              |                  |

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

1 row in set (0.00 sec)

记下来这两个值mysql-binary-log.000001、106,一会儿设置slave时要用到,注意,这是我的测试结果,你的结果很可能不同。(Binlog_Do_DB 和 Binlog_Ignore_DB也许能决定哪些库复制哪些库不复制,这个以后研究)

如果Master上已经有了数据,则需要先用mysqldump或者原始数据拷贝生成现有数据的”快照“,应用到Slave服务器上,再配置Slave。

如果Master上没有用户数据,或者已经把数据快照应用到Slave上,就可以在刚才执行”FLUSH TABLES WITH READ LOCK;“的终端窗口里执行

mysql> UNLOCK TABLES;

以解锁Master数据库,然后继续配置Slave。(或者退出该终端窗口也可)

2、在Slave上:

编辑文件/etc/mysql/my.cnf 确保有如下2行

[mysqld]

report-host=192.168.150.200

server-id=2

重启一下slave的mysql server。

然后在mysql中执行:

mysql> CHANGE MASTER TO

-> MASTER_HOST='192.168.150.200',

-> MASTER_USER='repl',

-> MASTER_PASSWORD='pass4repl',

-> MASTER_LOG_FILE='mysql-binary-log.000001',

-> MASTER_LOG_POS=106;

大功告成!

3、简单的管理任务(结果数据来自官方文档)

在Master上

mysql> SHOW PROCESSLIST \G;

*************************** 4. row ***************************

Id: 10

User: root

Host: slave1:58371

db: NULL

Command: Binlog Dump

Time: 777

State: Has sent all binlog to slave; waiting for binlog to be updated

Info: NULL

mysql> SHOW SLAVE HOSTS;

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

| Server_id | Host  | Port | Rpl_recovery_rank | Master_id |

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

|        10 | slave1 | 3306 |                0 |        1 |

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

1 row in set (0.00 sec)

在slave上

mysql> SHOW SLAVE STATUS \G

mysql> STOP SLAVE;

mysql> START SLAVE;

禁用Mysql复制:

1、在Slave上停止复制,执行:

mysql> STOP SLAVE;

2、在Master上,编辑 /etc/mysql/my.cnf,注释掉如下几行:

report-host=192.168.150.200

server-id=2

3、在Slave上寻找master.info文件:

~$ sudo find / -name master.info | grep master.info

找到后,删除,或者重命名,或者移动到其他目录。

重启Slave的mysql server。

mysqld-relay-bin.* 等文件可以删除了。

3、在Master上,编辑 /etc/mysql/my.cnf,注释掉如下几行:

server-id=1

log-bin=mysql-binary-log

binlog_format=MIXED

innodb_flush_log_at_trx_commit=1

sync_binlog=1

innodb_fast_shutdown=0 可以选择保留

重启Slave的mysql server。

mysql-binary-log.* 等文件可以删除了。

--------------------------------------分割线 --------------------------------------

Ubuntu 14.04 LTS 安装 LNMP Nginx\PHP5 (PHP-FPM)\MySQL http://www.linuxidc.com/Linux/2014-05/102351.htm

--------------------------------------分割线 --------------------------------------

0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值