一、测试环境:
主库(Master):Centos 5.5 64位操作系统Mysql Server version: 5.1.59
IP:192.168.1.188从库(Slave):Centos 5.5 64位操作系统
Mysql Server version: 5.1.59IP:192.168.1.189
权限管理:GRANT privileges ON db TO user@host IDENTIFIED BY "password" WITH GRANT OPTION
Privileges==alter 、select、create、 delect、 drop 、index、 insert 、replication slave 等
常见问题:Slave_IO_Running: No
1.先检查防火墙设置(测试前最好关闭)
2.所有操作完后,注意要重启mysql服务
二、主库的操作
#vi /etc/my.cnf
server-id = 1my.cnf内容比较多,这里只介绍一些重要参数
server-id = 1 这是数据库ID,此ID唯一,主库用默认的1即可,从库调整为2,多个从库的ID依次类推,切不可有相同ID出现,这样会造成同步出错。log-bin=mysql-bin 二进制日志文件,此项必须启用,从库需要通过它进行数据同步。 配置主库其实就检查这2个选项,如果你同步的数据库不是全部的,只是同步个别库,或个别的不需要同步,需要继续往下看
binlog-do-db=test 需要同步的数据库,如果同步多个库,需要另行重写,如
binlog-do-db=test1 binlog-do-db=test2 (数据库安装包不同这个选项有的配置文件里没有,需要加上)binlog-ignore-db=mysql 不需要同步的数据库,与binlog-do-db正好相反,如果你有100个库,只想同步其中几个,那么你应该使用binlog-do-db,如果不想同步其中的几个,就使用binlog-ignore-db
(数据库安装包不同这个选项有的配置文件里没有,需要加上)
建立同步用的数据库账户主库必须提供一个账户让从库通过此账户进行连接并进行同步,进入mysql后输入下面命令
mysql> grant replication slave on *.* to identified by '123456';
锁住主库表,停止数据更新
Mysql> flush tables with read lock;
打开另一个shell窗口 Shell> cd /var/lib/ Shell> tar -zcvf mysqlbak.tar.gz mysql(另外一种打包数据库的方法: Shell> mysqldump --opt --default-character-set=utf8 --master-data --databases castlot warlog assist > castlot120116.sql
Shell>vim castlot120116.sql 查看File和Position并记录)
Mysql>show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000073 | 98 | | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec)Mysql> unlock tables;
将mysqlbak.tar.gz拷贝到丛库数据库目录下并解压
Shell>scp mysqlbak.tar.gz
三、从库的操作
Shell>cd /usr/local
Shell>tar -zxvf mysqlbak.tar.gz
(另一种对应方法:Shell>mysql -S /tmp/mysql.sock --default-character-set=utf8 < castlot120116.sql)
将丛库my.cnf中server-id=1修改为server-id=2
增加要同步的数据库:
replicate-wild-do-table=assist.%
replicate-wild-do-table=castlot.%
replicate-wild-do-table=warlog.%
重启下mysql
之前先stop slave
设置连接MASTER MASTER_LOG_FILE为主库的File:mysql-bin.000073,MASTER_LOG_POS为主库的Position:98
mysql> change master to
master_host='192.168.1.188', master_user='syncuser', master_password='123456', master_log_file='mysql-bin.000073', master_log_pos=98; Mysql> start slave;
检查从库是否正常同步
mysql>show slave status \G; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.1.188 Master_User: syncuser Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000073 Read_Master_Log_Pos: 98 Relay_Log_File: TMac-relay-bin.000073 Relay_Log_Pos: 12753 Relay_Master_Log_File: mysql-bin.000073 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: