linux系统下,搭建mysql单向复制

一、试验环境CentOS release 5.5 64bit mysql5.0.90

A:主服务器主机名www.caimincun.com         ip192.168.1.203

B:从服务器主机名uc.caimincun.com              ip192.168.1.215

由于MySQL不同版本之间的(二进制日志)binlog格式可能会不一样,因此最好的搭配组合是MasterMySQL版本和Slave的版本相同或者MasterMySQL版本低于SlaveMySQL版本,Master的版本MySQL一定不能高于SlaveMySQL版本。

二、在主服务器上为复制设置一个连接账户。该账户必须授予REPLICATION SLAVE权限。如果账户仅用于复制(推荐这样做),则不需要再授予任何其它权限。

/local/server/mysql/bin/mysql -u root -pzhcw123

mysql> GRANT REPLICATION SLAVE,FILE ON *.* TO slave@'192.168.1.%'IDENTIFIED BY '123456';(这样授权可能开启同步的时候Slave_IO_Running可能为no,如果是测试环境,建议用下面的方法

mysql>grant all PRIVILEGES on *.* to slave@'192.168.1.%' identified by '123456';

mysql> show databases;

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

| Database                 |

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

| information_schema |

| dbcenter                  |

| mysql                      |

| test                         |

| uchome                   |

| zhcw                       |

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

mysql> create database AB;(为了实验方便,只建库不建表)

mysql> show databases;

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

| Database                 |

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

| information_schema |

| AB                         |

| dbcenter                 |

| mysql                     |

| test                         |

| uchome                   |

| zhcw                       |

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

mysql> flush privileges;

修改 主服务器上的my.cnf 文件

vi /etc/my.cnf

# Replication Master Server (default)

# binary logging is required for replication

下添加

注释掉#server-id = 1         --注释掉server-id = 1

log-bin=mysql-bin               -- 启动二进制日志系统

server-id=1                         --本机数据库ID 标示为主服务器

binlog-do-db=AB               --需要同步的数据库名

binlog-ignore-db=mysql      --避免同步mysql用户配置,以免不必要的麻烦如果多个数据库不需要同步,建议重复使用次参数,如binlog-ignore-db=mysql (重起一行)binlog-ignore-db=test,不建议binlog-ignore-db=mysql,test的方法

如果要同步的数据库有数据,需要执行FLUSH TABLES WITH READ LOCK语句清空内存中所有表和块写入磁盘并锁住表, 并将本地需要同步数据库打包拷贝到从数据库上

mysql> FLUSH TABLES WITH READ LOCK;

然后将要复制的数据库的信息拷贝到远程主机上

scp –r /local/data/mysql/AB 192.168.1.215:/data/mysql

对主服务器进行解锁

mysql> UNLOCK TABLES

关闭mysql服务

/local/server/mysql/bin/mysqladmin –u root –pzhcw123 shutdown

也可以用/etc/init.d/mysqld stop命令关闭mysql数据库

如果log-bin=/local/data/mysql路径下有日志,建议删除日志

rm –rf mysql-bin.*

启动mysql服务

/local/server/mysql/bin/mysqld_safe –user=mysql &

或者/etc/init.d/mysqld start

三、配置从服务器

mysql> create database AB;(为了实验方便,只建库不建表)

mysql> show databases;

[root@uc mysql]# vi /etc/my.cnf

修改 my.cnf 文件,在

# Replication Master Server (default)

# binary logging is required for replication

下添加

#server-id = 1                       --注释掉server-id = 1

server-id=2                           --从服务器ID号,不要和主ID相同

master-host=192.168.1.203  --指定主服务器IP地址

master-user=slave                 --指定在主服务器上可以进行同步的用户名

master-password=123456    -- 密码

master-port=3306                 --同步所用端口

master-connect-retry=60       --断点从新连接时间

replicate-ignore-db=mysql     --屏蔽对mysql库的同步

replicate-do-db=AB              --同步的数据库的名称

关闭mysql服务

/local/server/mysql/bin/mysqladmin –u root –pzhcw123 shutdown

或者/etc/init.d/mysqld stop

如果log-bin=/local/data/mysql路径下有日志,建议删除日志

rm –rf mysql-bin.*

启动mysql服务

/local/server/mysql/bin/mysqld_safe –user=mysql &

或者/etc/init.d/mysqld start

启动从服务器线程:

/local/server/mysql/bin/mysql –u root –pzhcw123

mysql> START SLAVE;

验证配置  通常情况下,mysql单向复制已经配置成功,但是有时候也会有一些问题

主服务器:

mysql> show master status;

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

| File         | Position | Binlog_Do_DB | Binlog_Ignore_DB |

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

| mysql.000001 |       98 | AB           | mysql            |

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

从服务器

mysql> show slave status;

如果Slave_IO_Running: Yes

Slave_SQL_Running: Yes

证明同步成功,如果有一个状态为NO,则表示同步失败

通常解决方法为在从库停止同步 mysql> stop slave;

mysql> CHANGE MASTER TO MASTER_LOG_FILE=' mysql.000001 ',MASTER_LOG_

POS=98;

mysql> start slave;

mysql> show slave status;

如果Slave_IO_RunningSlave_SQL_Running仍然有状态为No的,请参考一下信息,找到原因并解决。

如果是slave_io_running no了,那么有三种情况,一个是网络有问题,连接不上,第二个是有可能my.cnf有问题,请仔细检查并修改配置文件,三是授权的问题,replication slavefile权限是必须的,很多情况下,出现Slave_IO_Running:NO的原因是slave上没有权限读master上的数据。一旦iono了先看err日志,看看是什么错,很可能是网络,也有可能是包太大收不了,这个时候主备上改max_allowed_packet这个参数。

 

如果是slave_sql_running no了,那么也有两种可能,一是slave机器上这个表中出现了其他的写操作,二是slave进程重启,事务回滚造成的,这也是mysql的一种自我保护的措施,像关键时候只读一样。这种原因想恢复的话,只要停掉slaveset GLOBAL SQL_SLAVE_SKIP_COUNTER=1;再开一下slave就可以了,

mysql> stop slave;

mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;

mysql> start slave;

四、测试

在主服务器上建立一个表

mysql> use AB;

mysql> create table test(id int,name varchar(20));

Query OK, 0 rows affected (0.20 sec)mysql> show tables;

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

| Tables_in_AB |

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

| test         |

mysql> insert into test values(1,'stream');

Query OK, 1 row affected (0.12 sec)

 

mysql> insert into test values(2,'super');

Query OK, 1 row affected (0.00 sec)

mysql> insert into test values(3,'merry');

Query OK, 1 row affected (0.01 sec)

mysql> select * from test;

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

| id   | name   |

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

|    1 | stream |

|    2 | super  |

|    3 | merry  |

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

3 rows in set (0.01 sec)

在从服务器上查询

mysql> use AB;

mysql> show tables;

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

| Tables_in_AB |

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

| test         |

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

mysql> select * from test;

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

| id   | name   |

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

|    1 | stream |

|    2 | super  |

|    3 | merry  |

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

3 rows in set (0.01 sec)

单向复制试验成功!!!!

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值