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;
配置完成,可以测试下数据会不会同步了。