Chinaunix首页 | 论坛 | 博客
  • 博客访问: 133147
  • 博文数量: 11
  • 博客积分: 171
  • 博客等级: 入伍新兵
  • 技术积分: 387
  • 用 户 组: 普通用户
  • 注册时间: 2012-01-18 20:43
文章分类

全部博文(11)

文章存档

2013年(3)

2012年(8)

我的朋友

分类: Mysql/postgreSQL

2012-02-26 21:31:11

  数据库是管理与存储数据的仓库,在高访问量的网站服务器上,或者其它服务器上,每时每秒都进行着数据查询。有时候单单一台数据库服务器是远远达不到服务要求的,可以考虑做数据库负载均衡,达到在多台数据库上进行读写分离,这其中的一个步骤,就需要设置数据库的主从同步。
  以下实现在两台服务器上实现数据库主从同步,主数据库的IP为192.168.1.38,从数据库的IP为192.168.1.21,两个服务器的Mysql版本最后是一样的,不然可能会出错。
  1、创建同步账号
  在主数据库上进行以下操作
  1. mysql>grant replication slave on *.* to 'slave21'@'192.168.1.21' identified by 'redhat';
  2. mysql>flush privileges;
  设置一个密码为redhat的账号slave21,专门用来同步,在192.168.1.21数据库上用此账号登录主服务器,
  1. [root@localhost ~]# mysql -uslave21 -predhat -h192.168.1.38
  成功连接即可,不然要重新设置。
  2、设置主服务器my.cnf文件
  vi /etc/my.cnf,在[mysqld]下增加以下设置
  1. log-bin = mysql-bin      #设置binary格式
  2. server-id = 1          #主服务器号
  3. binlog-do-db = char1     #要同步的数据库,有多个数据库,可多行设置
  4. binlog-do-db = char2
  保存退出,重启Mysql。
  3、锁表、导数据
  登录主数据库服务器
  1.  mysql>flush tables with read lock;
  2.  mysql>show master status \G
  3. mysql> show master status \G   #以下内容的记下,在从数据库设置时用到
  4. *************************** 1. row ***************************
  5.             File: mysql-bin.000097
  6.         Position: 1555
  7.     Binlog_Do_DB: char1,char2
  8. Binlog_Ignore_DB: 
  9. 1 row in set (0.00 sec)

  10. mysql> 
  然后把数据库char1,char2导出,并导入到从数据库服务器上,最后在主数据库上解锁。
    mysql>unlock tables;
  4、从数据库服务器设置
  设置my.cnf文件,加入以下句子:
  1. server-id = 2            #这个id必须是唯一的,并且不能为1
  2. log-bin = mysql-bin
  3. replicate-do-db = char1      #设置同步的数据库
  4. replicate-do-db = char2
  5. master-host = 192.168.1.38     #主数据库服务器地址
  6. master-user = slave21        #用心同步数据库账号
  7. master-password = redhat
  8. master-port = 3306
  9. read-only = 1
  保存后退出,重启Mysql。登录Mysql,执行以下语句
  1. mysql>change master to master_host='192.168.1.38',master_user='slave21',master_password='redhat',master_log_file='mysql-bin.000097',master_log_pos= 1555;
  以上的master_log_file、master_log_pos就是刚才在主服务器上show master status得到的结果,执行后,启动slave功能,并查看slave状态
  1. mysql>start slave;
  2. mysql>show slave status \G
  如果slave_IO_running,slave_SQL_running都是Yes状态的话,则说明同步功能成功了,此时可以在主数据库服务器上char1数据库添加一条数据,然后看看从服务器的数据库有没有此数据。
  另外,可能有以下原因会产生slave_IO_running的状态是NO而导致同步不成功
    (1)同步账号没设置好,或者同步地址(或其它信息)错误。
    (2)主从服务器的字符集不一样,此时可以设置为一样的,如default-character-set=utf8
    (3)主从服务器的Mysql版本不一样。

阅读(2342) | 评论(0) | 转发(0) |
0

上一篇:Mysql的binary日志

下一篇:简单设置rsync服务

给主人留下些什么吧!~~