完全屬於我自己的Blog,運行在我的路由器H218N上.記錄著我想記錄的文字.

分类 原創 下的文章

05月 10

MySQL热备份

环境设定

假设有3台MySQL服务器,分别为Master,Standby,Slave.
其实Standby也是一个Slave,只是叫法不一样而已.

切换Master原理

切换Master的一个基本思路就是:Slave和Standby在完全相同的位置停止运行,然后把Slave重定向到Standby.

模拟真实场景

场景准备

当数据量大时,StandbySlave的数据可能不一样
(如其中一个快的把Master的完全同步好,另外一个同步进度稍微落后)
即Slave和Standby不在完全相同的位置停止运行.
现假定Slave稍微落后,连上Slave,执行

阅读全文 >>

04月 26

MySQL二进制日志使用技巧

一、MySQL主从的原理

1、Replication 线程

MySQL的 Replication 是一个异步的复制过程(mysql5.1.7以上版本分为异步复制和半同步两种模式),从一个 MySQL instace(我们称之为 Master)复制到另一个 MySQL instance(我们称之 Slave)。
在 Master 与 Slave 之间的实现整个复制过程主要由三个线程来完成,其中两个线程(Sql线程和IO线程)在 Slave 端,另外一个线程(IO线程)在 Master 端。
要实现 MySQL 的 Replication ,首先必须打开 Master 端的Binary Log(mysql-bin.xxxxxx)功能,否则无法实现。
因为整个复制过程实际上就是Slave从Master端获取该日志然后再在自己身上完全 顺序的执行日志中所记录的各种操作。打开 MySQL 的 Binary Log 可以通过在启动 MySQL Server 的过程中使用 “—log-bin” 参数选项,或者在 my.cnf 配置文件中的 mysqld 参数组([mysqld]标识后的参数部分)增加 “log-bin” 参数项。

2、MySQL 复制的基本过程如下:

2.1.Slave 上面的IO线程连接上 Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容;

2.2. Master 接收到来自 Slave 的 IO 线程的请求后,通过负责复制的 IO 线程根据请求信息读取指定日志指定位置之后的日志信息,返回给 Slave 端的 IO 线程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息在 Master 端的 Binary Log 文件的名称以及在 Binary Log 中的位置;

2.3. Slave 的 IO 线程接收到信息后,将接收到的日志内容依次写入到 Slave 端的Relay Log文件(mysql-relay-bin.xxxxxx)的最末端,并将读取到的Master端的bin-log的文件名和位置记录到master- info文件中,以便在下一次读取的时候能够清楚的高速Master“我需要从某个bin-log的哪个位置开始往后的日志内容,请发给我”

2.4. Slave 的 SQL 线程检测到 Relay Log 中新增加了内容后,会马上解析该 Log 文件中的内容成为在 Master 端真实执行时候的那些可执行的 Query 语句,并在自身执行这些 Query。这样,实际上就是在 Master 端和 Slave 端执行了同样的 Query,所以两端的数据是完全一样的。

阅读全文 >>

04月 24

数据库主从服务器搭建(克隆Master与克隆Slave)

环境设定

Master服务器资料

IP:192.168.1.100
PORT:3306
用户名:root
密码:root
Slave用户:repl_user
Slave密码:root

Slave服务器资料

参考数据库主从服务器搭建(一主一从)")

克隆Master

以下操作在Master服务器上进行

要克隆Master,先要把Master的数据备份出来,为避免备份时数据有所变化,先把还在缓冲区没写入表中的数据写到表中,并锁定服务器,不让再进行写操作.

FLUSH TABLES WITH READ LOCK;

备份服务器中所有数据库到sql文件,注意!!锁定表后,不能退出MySQL!!一旦退出MySQL,会自动解锁!

mysqldump -h192.168.1.100 --port=3306 -uroot -proot --all-databases > master_all.sql

备份单个数据库(如inti)时可用

 mysqldump -h192.168.1.100 --port=3306 -uroot -proot --databases init > init.sql

获取当前二进制日志的文件名和位置

SHOW MASTER STATUS;
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000003 |     2670 |              |                  |
+-------------------+----------+--------------+------------------+

现在可以解除数据服务器的锁定

UNLOCK TABLES;

阅读全文 >>

04月 24

Ubuntu 下的MySQL多实例运行

创建配置文件

举例如下,多运行一个监听3309端口的MySQL实例,把原来的my.cnf复制一份到/etc/mysql/my3309.cnf
修改成以下配置

[client]
port        = 3309
socket        = /var/run/mysqld/mysqld3309.sock

[mysqld_safe]
socket        = /var/run/mysqld/mysqld3309.sock
nice        = 0

[mysqld]
user        = mysql
pid-file    = /var/run/mysqld/mysqld3309.pid
socket        = /var/run/mysqld/mysqld3309.sock
port        = 3309
datadir        = /var/lib/mysql3309

由于Ubuntu使用了一种安全软件叫做AppArmor,这个安全软件会在你的文件系统中创建一个允许应用程序访问的区域(专业术语:应 用程序访问控制)。如果不为MySQL修改AppArmor配置文件,永远也无法为新设置的存储位置启动服务。

阅读全文 >>

04月 19

数据库主从服务器搭建(一主一从)

修改配置文件

修改MySQL配置文件如下
一般linux环境下配置文件路径是

/etc/mysql/my.cnf

修改配置文件前,先把MySQL服务关停,

# service mysql stop

在主服务器的配置文件添加一下内容

log-bin         = master-bin
log-bin-index   = master-bin.index
server-id       = 1
log-slave-updates 
slave-skip-errors #是跳过错误,继续执行复制操作

log-slave-updates 选项含义请参考数据库主从服务器搭建(克隆Master与克隆Slave)后续补充部分

!!注意!!
必须注释掉这个配置项或者添加各服务器的IP

bind-address           = 127.0.0.1

修改配置完毕后,启动MySQL服务,登录并进行以下操作

master > CREATE USER repl_user ;/*! repl_user是从服务器登录到主服务器时的用户名*/
master > GRANT REPLICATION SLAVE ON *.* TO repl_user IDENTIFIED BY 'password';/*! 为从服务器用户设置登录允许登录域及登录密码 password */

在从服务器的配置文件添加一下内容

log-bin         = master-bin
log-bin-index   = master-bin.index
server-id       = 2
relay-log-index = slave-relay-bin.index
relay-log       = slave-relay-bin
log-slave-updates #log-bin 用于启动数据库的更新日记,当针对启动这个选项的数据库本身进行数据跟新时更新操作将被记录。log-slave-updates 告诉Slave在二进制记录中记录从主数据库同步到的更新数据。如果只启动log-bin 而没有启动log-slave-updates则Slave只记录针对自己数据库操作的更新。
slave-skip-errors #是跳过错误,继续执行复制操作

阅读全文 >>