1.修改主服务器配置文件my.cnf
[mysqld]
server-id = 1 //服务器唯一id
log-bin = mysql-bin //开启二进制文件
ps:这个配置默认是同步所有的数据库的,还可以加入下面配置项
Binlog_Do_DB = test //只加载test数据库
Binlog_Ignore_DB = mysql //忽略mysql数据库
2.在master创建slave连接的账号replication密码为mysqlpassword,只有ip 192.168.106.%可以连接,并且刷新权限
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'192.168.106.%' IDENTIFIED BY 'mysqlpassword';
FLUSH PRIVILEGES;
3.从服务器配置文件修改my.cnf
server-id = 2
4.导出|入服务器快照
如果既有MYISAM和INNODB的话,用下面命令行导出服务器快照
mysqldump -uroot -p --single-transaction --events --triggers --routines --flush-logs --master-data=2 --databases test > db.sql
只有INNODB的话就是用如下命令:
mysqldump -uroot -p --single-transaction --events --triggers --routines --flush-logs --master-data=2 --databases test > db.sql
这里需要注意几个参数的使用:
–single-transaction 这个参数只对innodb适用。
–databases 后面跟除mysql以后的其他所有数据库的库名,我这里只有一个test库。
–master-data 参数会记录导出快照时候的mysql二进制日志位置,一会会用到。
ps:这里可以用自己的方法导出快照,如果是生产环境要用数据库的锁机制,保证数据一致性
将快照版本还原到从服务器上以后,此时从服务器上的数据和主服务器的数据是一致的。
mysqldump -uroot -p -h 192.168.106.2 test < db.sql
5.使用命令查找主服务器MASTER_LOG_FILE的值
在主服务器执行以下命令
show master status
6.从服务器执行同步
用系统实际值替代下面的参数
mysql> CHANGE MASTER TO
-> MASTER_HOST='master_host_name',
-> MASTER_USER='replication_user_name',
-> MASTER_PASSWORD='replication_password',
-> MASTER_LOG_FILE='recorded_log_file_name',
-> MASTER_LOG_POS=recorded_log_position;
配置文件里面的例子:
CHANGE MASTER TO MASTER_HOST='125.564.12.1', MASTER_PORT=3306, MASTER_USER='joe', MASTER_PASSWORD='secret';
可能这个例子比较简单,当时我就是直接安装这个修改的
7.开启从服务器同步功能
在从服务器上执行
start slave //开启同步
stop slave //关闭同步
停止主从配置
从服务器上运行
stop slave //关闭同步
change master master_host=" "; //关闭主机(下次设置)