您的位置:首页 > 数据库 > MySQL

Mysql 5.5 主从数据复制(Master-Slave Replication)配置笔记

2015-06-14 08:25 781 查看
这里讲的是Master-Slave的主从复制方式(单向复制),如果需要Master-Master模式,反过来再配置一遍就可以了。

Server的OS是CentOS6.3。

主从复制(Master-Slave Replication)配置步骤:

1. 在Master和Slave上都安装Mysql server

两个mysql server的配置文件/etc/my.cnf内容改为如下,不同之处是server-id不一样,一个是1,一个是2。

其中binlog-do-db是需要复制数据的database名字,可以配置多个(写在多行)。

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

user=mysql

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

#add for performance tuning

max_connections = 1500

expire_logs_days =2

max_connect_errors =100

binlog_format=mixed

log-bin=mysql_bin

server-id=1

binlog-do-db=dbname

binlog-do-db=dbname2

binlog-ignore-db=test

binlog-ignore-db=mysql

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

2. 为两个Mysql建立相同的database和table,添加用户和权限。

create database dbname;

grant all privileges on dbname.* to `user`@`%` identified by 'pass';

grant all privileges on dbname.* to `user`@`localhost` identified by 'pass';

flush privileges;

如果是已存在的Master数据库,table以及数据已经存在,则需要进行数据迁移,有两种方式迁移。

2.1 用mysqldump进行数据迁移

[master-mysql]

mysqldump -uuser -ppass -A -R dbname > masterbackup.sql

[slave-mysql]

mysql -uuser -ppass dbname < masterbackup.sql

2.2 复制数据文件进行数据迁移

例如centos默认mysql的数据目录是/var/lib/mysql

则只需要将master mysql上面的数据目录打包,覆盖slave mysql的数据目录,重启slave,就完成了数据迁移。

3. 建立数据复制

[master-mysql]

grant replication slave on *.* to `repluser`@`slave_ip` identified by 'pass' ;

运行以上命令,建立一个专门用于复制数据的用户。

show master status;

运行以上mysql命令,得到master mysql当前的数据文件和数据bin-log位置。

得到的结果应该如下:

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

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

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

| mysql-bin.000001 | 127 | | |

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

[slave-mysql]

change master to master_host='master_ip',master_user='repluser',master_password='pass', master_log_file='mysql-bin.000001',master_log_pos=127;

start slave;

运行以上命令将slave连接到master上,启动slave数据复制。

show slave status\G;

运行以上命令查看slave状态,结果如果出现:

Slave_IO_Running: Yes

Slave_SQL_Running: Yes


则表示没有问题,数据复制已经生效。

4. 常见问题与解决方法

4.1 如果配置都没有问题,但是运行start slave出错,那么执行以下步骤:

重启master数据库,重新分配复制用户权限。重新运行第3步的操作。在slave数据库上执行:

stop slave; reset slave; start slave;

4.2 如果执行show slave status\G; 发现结果中有error,说明复制遇到了问题,若认为问题可以忽略,则执行:

SET GLOBAL SQL_SLAVE_SKIP_COUNTER=100; START SLAVE;

这样可以忽略100个错误,视当前遇到的错误个数决定。

4.3 如果调用mysql的应用程序出现下面的错误:

Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT and at least one table uses a storage engine limited to row-based logging. InnoDB is limited to row-logging when transaction isolation level is READ COMMITTED or
READ UNCOMMITTED

则说明复制使用的事务等级有问题,不符合应用程序的需求,解决方法是:

在配置文件/etc/my.cnf中配置 BINLOG_FORMAT=MIXED
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: