CentOS之MYSQL主从同步配置(一)

2015-01-23 22:07:19 · 作者: · 浏览: 12

一、主机master与salver均关闭防火墙iptables,执行service iptables stop命令:

设置SELINUX文件的SELINUX=disabled,如图所示:

?

二、创建数据库

分别登录master机和slave机的mysql:mysql –u root –p

创建数据库:create database repl;

在/usr/local/mysql目录下建立MYSQL复制的日志配置文件/usr/local/mysql/mysql-bin.log并赋予权限以及改变文件的所有者:

[root@master mysql] touch mysql-bin.log

[root@master mysql] chmod 755 mysql-bin.log

[root@master mysql] chown -R mysql:mysql .

1、修改master机器中mysql配置文件my.cnf,该文件在/etc目录下

在[mysqld]配置段添加如下字段

server-id=1

log-bin=log

binlog-do-db=repl //需要同步的数据库,如果没有本行,即表示同步所有的数据库

binlog-ignore-db=mysql //被忽略的数据库


在master机上为slave机添加一同步帐号
grant replication slave on *.* to 'repl'@'192.1681.220' identifiedby '123456';


重启master机的mysql服务:service mysqld restart


用show master status 命令看日志情况

mysql>show master status;

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

|File |Position | Binlog_Do_DB |Binlog_Ignore_DB |

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

| log.000003| 98 |repl |mysql |

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

1 row in set (0.00 sec)

在主机master上添加主机salver的同步账号:

mysql> grant replication slave on *.* to'slave'@'192.168.31.137' identified by 'admin';

执行如下命令查看:

?

在[mysqld]配置段添加如下字段

server-id=1

log-bin=log

binlog-do-db=repl //需要同步的数据库,如果没有本行,即表示同步所有的数据库

binlog-ignore-db=mysql //被忽略的数据库

?

在文件中添加如下属性项:

log-bin = /usr/local/mysql/mysql-bin.log

binlog-ignore-db=mysql

binlog-ignore-db=information_schema



在master机上为slave机添加一同步帐号
grant replication slave on *.* to 'repl'@'192.1681.220' identifiedby '123456';


重启master机的mysql服务:service mysqld restart

s

select user.host from mysql.user

可以看见备份账户以及设置完成。下面对数据库表加锁只读。

mysql锁表只读(其他账户登录mysql后无法进行写表操作,防止备份数据库后,主mysql表更新,导致和从数据库内容不一致)

mysql> flush tables with read lock;

E:查看状态:

[root@master mysql] mysql -u root -padmin -e "show master status"

注:File字段的日志名称(mysql-bin.000001)就是从机备份所需要的日志文件。

2、修改slave机中mysql配置文件

解锁数据库:

mysql> unlock tables;

同样在[mysqld]字段下添加如下内容

server-id=2

这里开始

master-host=192.168.1.222

master-user=repl

master-password=123456

master-port=3306

master-connect-retry=60

到这里结束,这些参数不能在配置在数据库中 5.1以后的mysql,只能命令

replicate-do-db=repl //同步的数据库,不写本行 表示 同步所有数据库

注意事项(出现错误)
Mysql版本从5.1.7以后开始就不支持“master-host”类似的参数
在从库上执行如下命令;
change master to master_host='masterIP', master_user='slave', master_password='slvaePASS';

change master to master_host='10.171.244.109',

master_user='slave',

master_password='admin',

master_log_file="mysql-bin.000006",

master_log_pos=107 ;


然后重启slave机的mysql


在slave机中进入mysql

mysql>start slave;

mysql>show slave statusG;
如果Slave_IO_Running、Slave_SQL_Running状态为Yes则表明设置成功。


?

四、出现的问题

问题1 当我在执行start slave这条命令时,系统提示

ERROR 1200 (HY000): The server is not configured as slave; fixin config file or with CHANGE MASTER TO,

执行show slave status;又提示Empty set (0.00 sec),想不通问题在哪里

?

或问题2 Slave_SQL_Running: No


后来发现,原来slave已经默认开启,要先关闭再开启

执行 slave stop;

再执行

change master tomaster_host='192.168.1.222',master_user='repl',master_password='123456',master_log_file='log.000003' ,master_log_pos=98;

然后执行 slave start;

这时 再执行show slave statusG

显示如下:

*************************** 1. row***************************

Slave_IO_State: Waiting for master to send event

M