mysql主从复制配置

时间:2022-09-21 13:16:59

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=" "; //关闭主机(下次设置)