Linux(Ubuntu)环境MYSQL->master/slave主从同步设置以及注意事项

 

master(192.168.1.2)环境: Linux ubuntu 2.6.28-11-server + mysql 5.1.44, x86_64
slave(192.168.1.3)环境:Linux ubuntu 2.6.27-7-server + mysql 5.1.44, for pc-linux-gnu (i686)

两台机器mysql的根目录均为:/usr/local/mysql 数据目录为:/usr/local/mysql/var

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

===========================主库(192.168.1.2)操作==============================
1、修改my.cnf

  1. roger@ubuntu:~#vim /etc/my.cnf
  2. [mysqld]
  3. server-id=1
  4. og-bin=mysql-bin
  5. binlog_format=mixed (保持主从库的日志格式一致,如果不一致可能会不成功)

注:
a、下面两个选项可以制定生成binlog和忽略的库,如果要同步所有数据库则下面两行不要不用写
b、binlog-ignore-db = mysql 不需要同步的数据库
c、binlog-do-db = rogerdb 需要同步的库
d、binlog-ignore-db与binlog-do-db正好相反,如果你有100个库,只想同步其中几个,那么你应该使用binlog-do-db,如果不想同步其中的几个,就使用binlog-ignore-db
e、在实际测试中发现,如果通过上面两个命令指定了库,则master的Position 一直不会变化,google了一下有人说执行sql前要先use rogerdb才行-_-!

2、重启mysql服务

  1. roger@ubuntu:~# /usr/local/mysql/share/mysql/mysql.server restart

3、建立同步用的数据库账户

  1. mysql>GRANT REPLICATIONSLAVEON *.* TO slave@192.168.1.3IDENTIFIEDBY '1q2w3e';

如果想要在Slave上有权限执行 “LOAD TABLE FROM MASTER” 或 “LOAD DATA FROM MASTER” 语句的话,必须授予全局的 FILE 和 SELECT 权限:

  1. mysql>GRANT RELOAD,SUPER,FILE,SELECT,REPLICATIONSLAVEON *.* TO backup@192.168.60.132IDENTIFIEDBY '1q2w3e';

4、锁住主库表,停止数据更新

  1. mysql> flush tableswithread lock 不要退出这个终端,否则这个锁就不生效了;

5、显示主库信息并记录

  1. mysql> show masterstatus  记录前两框的数据

+—————————–+————-+———————–+—————————+
| File                    | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+—————————–+————-+———————–+—————————+
| mysql-bin.000016 | 1676483 |                  |                         |
+—————————–+————-+———————–+—————————+

6、备份需要同步库文件并复制到从库服务器上,如果要同步全部库,则打包/usr/local/msyql/var目录,如果只同步一个数据rogerdb,则只复制rogerdb

  1. roger@ubuntu:~#cd /use/local/mysql/var
  2. roger@ubuntu:~#tar -zcvf mysql-master-rogerdb.tar.gz rogerdb //将rogerdb数据库打包
  3. 将文件mysql-master-rogerdb.tar.gz传到slave192.168.1.3:/usr/local/mysql/var/

===========================从库(192.168.1.3)操作==============================

1、登陆从库,解压数据

  1. roger@ubuntu:~# cd /usr/local/mysql/var
  2. roger@ubuntu:~# tar -zxvf mysql-master-rogerdb.tar.gz
  3. roger@ubuntu:~# chmod -R mysql:mysql rogerdb

2、修改my.cnf

  1. roger@ubuntu:~#vim /etc/my.cnf
  2. # 日志的名称
  3. log-bin=mysql-bin
  4. # 日志格式
  5. binlog_format=mixed
  6. # 从服务器ID
  7. server-id=2
  8. # 主服务器的IP地址或者域名
  9. master-host=192.168.1.2
  10. # 主数据库的端口号
  11. master-port=3306
  12. # 同步数据库的用户
  13. master-user=slave
  14. # 同步数据库的密码
  15. master-password=1q2w3e
  16. # 如果从服务器发现主服务器断掉,重新连接的时间差
  17. master-connect-retry=60
  18. # 需要备份的库
  19. # replicate-do-db=rogerdb
  20. # 忽略的数据库
  21. replicate-ignore-db=mysql
  22. replicate-ignore-db=test

3、重启mysql服务

  1. roger@ubuntu:~# /usr/local/mysql/share/mysql/mysql.server restart

4、手动同步从库

  1. mysql>slave stop;
  2. mysql>CHANGE MASTERTO
  3. MASTER_HOST='192.168.1.2',
  4. MASTER_USER='slave',
  5. MASTER_PASSWORD='1q2w3e',
  6. MASTER_PORT=3306,
  7. MASTER_LOG_FILE='mysql-bin.000016',(刚才在主库记录的数据)
  8. MASTER_LOG_POS=1676483,(刚才在主库记录的数据)
  9. MASTER_CONNECT_RETRY=60;
  10. mysql>slave start;

如果此处CHANGE出错,可以执行 reset slave,来重新设置。

5、检查从库是否正常同步

  1. mysql>show slavestatus\G;

当Slave_IO_Running 和 Slave_SQL_Running 两列的值都为 “Yes”,表明 Slave 的 I/O 和 SQL 线程都在正常运行,如果出现错误,可以从Last_Error这个参数中看出哪里出错,然后进行排查

6、查看主库复制进度

  1. mysql>show processlist\G;

7、解锁主库表

  1. mysql>unlock tables;

8、分别用如下命令查看master和slave状态

  1. master:
  2. mysql> show masterstatus;
  3.  
  4. slave:
  5. mysql> show slavestatus\G
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值