Mysql数据库主从备份配置

主从备份条件

1. 两台Mysql服务器,Mysql版本一致(比如都是5.5),跨版本没试过不知道行不行
2. 同一个机房内网或者就是外网可通信就行 

主服务器配置

编辑配置文件(先备份)

cp /etc/my.cnf /etc/my.cnfbak
vi /etc/my.cnf

[mysqld]下面修改配置

[mysqld]
log-bin=mysql-bin
server-id=1  //值自行设置,唯一即可
binlog-do-db=www  //只备份www数据库
binlog_ignore_db=mysql  //忽略备份mysql数据库

如果没有加binlog-do-db和binlog_ignore_db,备份全部数据库

重启数据库

service mysqld restart

创建用户,赋予复制权限(REPLICATION SLAVE)

mysql -u root -p123456
create user 'username'@'ip' identified by 'password';  //username 密码,ip为从数据库服务器ip,内网ip公网ip都可以,password从数据库复制的密码
grant replication slave on *.* to 'username'@'ip' identified by 'password';  //赋予用户权限

锁定数据库,防止数据写入

flush tables with read lock;

导出整个数据库

mysqldump -u root -p123456 --all-databases --lock-tables=false --events --ignore-table=mysql.events  > databases.sql

查看主数据库状态

mysql -u root -p123456
show master status;

结果显示

+------------------+----------+----------------+------------------+
| File             | Position | Binlog_Do_DB   | Binlog_Ignore_DB |
+------------------+----------+----------------+------------------+
| mysql-bin.000001 |      377 | www             |           mysql       |
+------------------+----------+----------------+------------------+

这几个数据在从数据库服务器上会用到

表解锁

unlock tables;

从服务器配置

导入主服务器导出来的database.sql

mysql -u root -p123456 < /root/database.sql

编辑配置文件(先备份)

cp /etc/my.cnf /etc/my.cnfbak
vi /etc/my.cnf

[mysqld]下面新增配置

[mysqld]
server-id=2  //自行设置,唯一即可,有些配置文件有定义了,先查找下别重复定义了

重启数据库

service mysqld start

进入mysql,执行命令

CHANGE MASTER TO 
MASTER_HOST='ip',
MASTER_USER='username',
MASTER_PASSWORD='password',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=377,
MASTER_CONNECT_RETRY=10;

配置解释

MASTER_HOST  //主服务器ip
MASTER_USER  //主服务器定义的用户
MASTER_PASSWORD  //主服务器定义的密码
MASTER_PORT //主服务器mysql端口
MASTER_LOG_FILE //使用show master status 查出来的字段File
MASTER_LOG_POS  //使用show master status 查出来的字段Position
MASTER_CONNECT_RETRY  //在主服务器宕机或连接丢失的情况下,从服务器线程重新尝试连接主服务器之前睡眠的秒数

启动slave 进程

start slave;

配置完成,可以测试下数据会不会同步了。