cszer

MySQL主从复制

分类: 技术, Linux 运维, MySQL   标签:    评论: 4   阅读:2,411 views

MySQL的复制是指将主数据库的DDL(CREATE、ALTER、DROP等)和DML(UPDATE、INSERT、DELETE)操作通过二进制日志bin-log传到从服务器上,然后在从服务器上对这些日志做重新执行的操作,从而使得从服务器和主服务器保持数据的同步。

MySQL的主从复制至少是需要两个MySQL的服务,当然MySQL的服务是可以分布在不同的服务器上,也可以在一台服务器上启动多个服务。下面通过一个实例来配置主从复制。

环境:

mster:192.168.1.101
slave:192.168.1.102

(1)首先确保主从服务器上的Mysql版本相同

(2)在master上,设置一个从数据库的账户,使用REPLICATION SLAVE赋予权限,如:

mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave001'@'192.168.1.102' IDENTIFIED BY'123456';
Query OK, 0 rows affected (0.13 sec)

(3)修改master数据库的配置文件my.cnf,开启BINLOG,并设置server-id的值,修改之后必须重启Mysql服务

[mysqld]
server-id=1     #服务器id
log-bin=mysql-binlog     #打开二进制日志,最好设置到不同的磁盘已减少磁盘io
expire_logs_day=10     #设置二进制日志保存日期
max_binlog_size=500M  #设置每个binlog文件的大小

(4)之后可以得到主服务器当前二进制日志名和偏移量,这个操作的目的是为了在从数据库启动后,从这个点开始进行数据的恢复

mysql> show master status\G;
*************************** 1. row ***************************
File: mysql-bin.000003
Position: 243
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)

(5)好了,现在可以停止主数据的的更新操作,并生成主数据库的备份,这里通过mysqldump导出数据库

注意在导出数据之前先对主数据库进行READ LOCK,以保证数据的一致性

mysql> flush tables with read lock;
Query OK, 0 rows affected (0.19 sec)

之后是使用mysqldump备份

mysqldump -h127.0.0.1 -p3306 -uroot -p test > /root/test1.sql

最好在主数据库备份完毕,恢复写操作

mysql> unlock tables;
Query OK, 0 rows affected (0.28 sec)

(6)将刚才主数据备份的test.sql复制到从数据库,进行导入

(7)接着修改从数据库的my.cnf

log_bin= mysql-bin
server_id= 2     #mysql 复制可能出现主服务器上可以运行的语句,从服务器不能够运行,所以我们在my.cnf加一句slave-skip-errors=all 意思是忽略所有的sql语句错误!
relay_log= mysql-relay-bin     #该文件用于存放Slave端的I/O线程从Master端读取的二进制文件信息

slave数据库授权:

mysql> change master to
mysql> master_host='192.168.1.101',
mysql> master_user='slave001',
mysql> master_password='123456',
mysql> master_log_file='mysql-bin.000003',
mysql> master_log_pos=243;

参数说明:

MASTER_HOST:Master主机名(或者IP地址)
MASTER_USER:Slave连接Master主机的用户名
MASTER_PASSWORD:Slave连接Master的用户密码
MASTER_LOG_FILE:开始复制的日志文件名称
MASTER_LOG_POS:开始复制的日志文件位置,也就是Log Position

(8)在从服务器上,启动slave进程

mysql> start slave;

(9)在从服务器进行show salve status验证

mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.1.101
                  Master_User: slave
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-binlog.000002
          Read_Master_Log_Pos: 209
               Relay_Log_File: mysql-relay-bin.000003
                Relay_Log_Pos: 357
        Relay_Master_Log_File: mysql-binlog.000002
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB:

(10)好了,现在可以在我们的主服务器做一些更新的操作,然后在从服务器查看是否已经更新

参考:http://www.cnblogs.com/hustcat/archive/2009/12/19/1627525.html

除非注明,文章皆由( csz )原创,转载请标明本文地址
本文地址: http://www.cszhi.com/20120415/mysql-replication.html

04-15
2012

4 Comments for MySQL主从复制

发表评论

Trackbacks and Pingbacks: