jom_ch

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

网上资料显示如果Master和Slave的mysql版本不同,可能会产生不可预知的错误,为了避免这种情况,所以我在配置之前先统一了mysql版本,尽管是线上的应用。

操作环境:

Centos(Linux 2.6)+mysql5.1

Master => 192.168.1.100
Slave  => 192.168.1.101

主从复制数据库名称:mydb

1,Master mysql server 配置

1.1,修改mysql配置文件

[root@localhost home]# vim /etc/my.cnf

[mysqld]段做如下修改

#master id
server-id = 1
#开启binary日志
log-bin = mysql-bin
#指定数据库
binlog-do-db = mydb

重启mysql
[root@localhost home]# /sbin/service mysqld restart


1.2,创建Slave mysql登录用户,并赋予权限

mysql> GRANT REPLICATION SLAVE ON *.* TO 'masteruser'@'192.168.1.%' IDENTIFIED BY 'masterpass';

其实中masteruser,masterpass分别为用户名和密码,192.168.1.%为允许192.168.1网段所有机器连接


2,同步Master数据库到Slave

2.1,在Master mysql上执行读锁定语句:

mysql> flush tables with read lock;

2.2,显示Master bin-log最新信息

mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000002 |  4038395 | mydb         |                  |
+------------------+----------+--------------+------------------+

2.3,保留当前终端界面,Clone Session新的终端界面打包mydb库

[root@localhost home]# tar -zcvf ./mydb.tar.gz ./mydb/


2.4,回到上一个终端界面,进行解锁操作

mysql> unlock tables;


2.5,登录到Slave服务器获取mydb.tar.gz压缩包,并解压到 Slave 的mysql data目录下

[root@localhost data]# tar -zxvf ./mydb.tar.gz


3,Slave mysql server 配置和启用主从复制

3.1,修改mysql配置文件

[root@localhost home]# vim /etc/my.cnf

[mysqld]段做如下修改

server-id = 2
master-host = 192.168.1.100
master-user = masteruser
master-password = masterpass

重启mysql
[root@localhost home]# /sbin/service mysqld restart

3.2,启用复制

mysql> slave stop;
mysql> change master to master_host='192.168.1.100',master_user='masteruser', master_password='masterpass', master_log_file='mysql-bin.000002', master_log_pos=4038395;
mysql> slave start;

3.3,说明:

master_log_file='mysql-bin.000002'
master_log_pos=4038395

请参照步骤2.2中 show master status; 语句执行的结果,变量字面意思是从Master的日志文件'mysql-bin.000002'的第'4038395'的字符位开始复制。
之所以在步骤2.2中要保留终端界面,
一是为了方便看到 master_log_file和master_log_pos 这2个变量的值;
二是为了执行解锁命令 unlock tables ,在没有执行该语句之前需要保持会话。

3.4,在Slave上查看运行状态

mysql> show slave status/G;

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

上面两项为Yes即为主从复制工作正常

如进一步验证,可在Master的mydb库的表里更改任一字段值,到Slave相应的位置,可以看到相同的改动。

至此,mysql主从复制简单配置就完成了。


4,遇到的问题

之前为了统一mysql版本,在重新编译安装Salve的mysql的时候,没有编译进去gbk字符集,导致复制失败,只好重新编译了一下:

[root@localhost mysql5.1]# ./configure --prefix=/user/local/mysql5 --with-charset=gb2312 --with-extra-charsets=gbk,gb2312

 

主要参考文档:
http://www.php100.com/html/webkaifa/database/Mysql/2010/1103/6744.html

posted on 2011-04-15 13:19  jom_ch  阅读(181)  评论(0编辑  收藏  举报