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 subsir@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 subsir@ubuntu:~# /usr/local/mysql/share/mysql/mysql.server restart
3、建立同步用的数据库账户
1 mysql>GRANT REPLICATION SLAVE ON *.* TO slave@192.168.1.3 IDENTIFIED BY 'asd123asd';
如果想要在Slave上有权限执行 “LOAD TABLE FROM MASTER” 或 “LOAD DATA FROM MASTER” 语句的话,必须授予全局的 FILE 和 SELECT 权限:
1 mysql>GRANT RELOAD,SUPER,FILE,SELECT,REPLICATION SLAVE ON *.* TO backup@192.168.60.132 IDENTIFIED BY 'asd123asd';
4、锁住主库表,停止数据更新
1 mysql> flush tables with read lock; ##不要退出这个终端,否则这个锁就不生效了;
5、显示主库信息并记录
1 mysql> show master status; ##记录前两框的数据
+—————————–+————-+———————–+—————————+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+—————————–+————-+———————–+—————————+
| mysql-bin.000016 | 1676483 | | |
+—————————–+————-+———————–+—————————+
6、备份需要同步库文件并复制到从库服务器上,如果要同步全部库,则打包/usr/local/msyql/var目录,如果只同步一个数据rogerdb,则只复制rogerdb
1 subsir@ubuntu:~#cd /use/local/mysql/var 2 subsir@ubuntu:~#tar -zcvf mysql-master-rogerdb.tar.gz rogerdb //将rogerdb数据库打包 3 将文件mysql-master-rogerdb.tar.gz 传到slave机192.168.1.3:/usr/local/mysql/var/
===========================从库(192.168.1.3)操作==============================
1、登陆从库,解压数据
1 subsir@ubuntu:~# cd /usr/local/mysql/var 2 subsir@ubuntu:~# tar -zxvf mysql-master-rogerdb.tar.gz 3 subsir@ubuntu:~# chmod -R mysql:mysql rogerdb
2、修改my.cnf
1 subsir@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 subsir@ubuntu:~# /usr/local/mysql/share/mysql/mysql.server restart
4、手动同步从库
1 mysql>slave stop; 2 mysql>CHANGE MASTER TO 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 slave status \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 master status; 3 4 slave: 5 mysql> show slave status \G