【背景】一台master和一台slave分别部署在不同的服务器上
【环境】Redhat + mysql5.5.18
【步骤】
<Master>
1. 编辑my.cnf文件
[mysqld]
log-bin=mysql-bin # 开启binlog
server-id=1
binlog-do-db=test # 需要同步的数据库
expire_logs_days=5 # binlog保存的天数
max_binlog_size=500M # binlog大小
log-slave-updates
2. 给slave用户权限同步,首先需要进入master数据库。
mysql > grant replication slave,file on *.* to root@'%' identified by 'password';
mysq l> flush privileges;
3. 锁定表
mysql> flush tables with read lock;
4. 查看主库的状态,里面有些内容在slave配置时需要提供。
mysql> show master status;
5. 导出库
/usr/local/mysql/bin/mysqldump --single-transaction --all-databases>/software/master.sql
或者
mysqldump -uroot -p -d databasename > createtab.sql(只导表结构)
6. 解锁表
mysql> unlock tables;
<Slave>
1. 修改slave的my.cnf
[mysqld]
server-id=2
replicate-do-db=test
log-bin=slave-bin #开启salve的binlog
2. 导入之前master上导出的数据
scp root@192.1698.0.1:/user/local/mysql/bin/software/master.sql .
3. 改为从库,其中master_log_file与master_log_pos从主库状态表中得到。
mysql > set @@global.max_allowed_packet=11*1024*1024;
mysql > change master to master_host='10.15.82.174', master_port=3306, master_user='root', master_password='111111', master_log_file='mysql-bin.000007',
master_log_pos=107;
4. 启动slave
mysql> start slave;
mysql> show slave status;
【注意】Master和Slave上的数据库和表结构必须一样,才能正常同步。