首页 > 代码库 > mysql主从库搭建

mysql主从库搭建

1、主备库的搭建:

    略

主库:10.1.1.17
备库:10.1.1.18



2、主库授权:

允许复制备份的权限

GRANT REPLICATION SLAVE ON *.* TO ‘slaveuser‘@‘10.1.1.18‘ IDENTIFIED BY ‘hsdhsT56‘;
FLUSH PRIVILEGES


3、主库数据导出

mysqldump  -uroot -p  -h 127.0.0.1 --databases TestDB --default-character-set=utf8 --net_buffer_length=16535 --single-transaction --master-data=http://www.mamicode.com/2   >TestDB.sql

如果该机器上有多个库,可以将所有库都导出

mysqldump  -uroot -p  -h 127.0.0.1 --all-databases --default-character-set=utf8 --net_buffer_length=16535 --max_allowed_packet=1048576 --single-transaction --master-data=http://www.mamicode.com/2   >all_databases.sql

参数说明:

因为我们这里是数据备份出来并作为slave导入,所以需要--single-transaction --master-data搭配使用,如果只是单纯导出数据可以只使用--single-transaction

net_buffer_length:
TCP/IP和套接字通信缓冲区大小,创建长度达net_buffer_length的行,如果这个值比目标数据库的值大,可能会出错。


--max_allowed_packet=1048576
客户端/服务器之间通信的缓存区的最大大小,使用这个参数,主要是为加快导出
使用的时候我将该参数设置到了--max_allowed_packet=21048576才把我的13G数据导出时间从8分钟缩短为7分钟。。。

single-transaction:
InnoDB 表在备份时,通常启用选项 --single-transaction 来保证备份的一致性,实际上它的工作原理是设定本次会话的隔离级别为:REPEATABLE READ,以确保本次会话(dump)时,不会看到其他会话已经提交了的数据。


master-data=http://www.mamicode.com/2:>

4、以上数据导入备库

mysql -uroot -p  -e --max_allowed_packet=1048576 --net_buffer_length=16384 <


5、

查看应该从哪个位置开始同步

grep -i "change master" TestDB.sql
MASTER_LOG_FILE=‘mysql-bin.000004‘, MASTER_LOG_POS=106这里就说明了,我这次数据导出的末尾得主库日志为mysql-bin.000004,位置为106。那么我把备库起来之后,就需要从同步此位置之后的数据


6、开始同步

--停止slave
STOP SLAVE
--CHANGE MASTER到主库
CHANGE MASTER TO MASTER_HOST=‘10.1.1.17‘,MASTER_USER=‘slaveuser‘,MASTER_PASSWORD=‘hsdhsT56‘,MASTER_LOG_FILE=‘mysql-bin.000004‘, MASTER_LOG_POS=106;
--开启slave
START SLAVE;
查看slave状态
SHOW SLAVE STATUS;



本文出自 “H2O's运维&开发路” 博客,转载请与作者联系!

mysql主从库搭建