1、主库开启binlog日志
找到主数据库的配置文件my.cnf,在[mysqld]部分插入如下两行:
[mysqld]
log-bin=mysql-bin #开启二进制日志
binlog_format=mixed
server-id=1 #设置server-id
log-slave-updates=1 #如果主库是其他库的从库的话需要添加此参数,否则从其它库同步的数据不会写入binlog
2、重启mysql,创建用于同步的用户账号
mysql -uroot -p
mysql>CREATE USER 'repl'@'172.23.xxx.xxx' IDENTIFIED BY 'repdbxxxxxx';
mysql>GRANT REPLICATION SLAVE ON *.* TO 'repl'@'172.23.xxxx';
mysql>flush privileges;
3.查看master状态
首先登陆数据库,然后刷新所有的表,同时给数据库加上一把锁,阻止对数据库进行任何的写操作
mysql > flush tables with read lock;
然后执行下面的语句获取二进制日志的信息
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000002 | 2593874 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
记录二进制文件名(mysql-bin.000002)和位置(2593874)
4、导出数据
mysqldump -uroot -p'123456' -S /data/3306/data/mysql.sock --all-databases > /server/backup/mysql_bak.$(date +%F).sql
如果数据量很大,可以在导出时就压缩为原来的大概三分之一
mysqldump -uroot -p'123456' -S /data/3306/data/mysql.sock --all-databases | gzip > /server/backup/mysql_bak.$(date +%F).sql.gz
解压
gzip -d XXXX.gz
这时可以对数据库解锁,恢复对主数据库的操作
mysql > unlock tables;
5、修改从库mysql配置
同样找到my.cnf配置文件,添加server-id
[mysqld]
server-id=2 #设置server-id,必须唯一
重启mysql服务
6、导入从主库导出的数据
mysql -uroot -p'123456' -S /data/3306/data/mysql.sock < /server/backup/mysql_bak.2015-07-01.sql
7、配置主从
登陆从库mysql,输入如下信息:
复制代码
mysql> CHANGE MASTER TO
-> MASTER_HOST='172.16.xxxx',
-> MASTER_USER='rep1',
-> MASTER_PASSWORD='repdbxxxxxx',
-> MASTER_LOG_FILE='mysql-bin.000002',
-> MASTER_LOG_POS=2593874;
启动slave同步进程:
mysql>start slave;
8.查看slave状态:
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 172.16.3.142
Master_User: rep1
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000013
Read_Master_Log_Pos: 11662
Relay_Log_File: mysqld-relay-bin.000022
Relay_Log_Pos: 11765
Relay_Master_Log_File: mysql-bin.000013
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
...
还可以用到的其他相关参数:
master开启二进制日志后默认记录所有库所有表的操作,可以通过配置来指定只记录指定的数据库甚至指定的表的操作,具体在mysql配置文件的[mysqld]可添加修改如下选项:
# 不同步哪些数据库
binlog-ignore-db = mysql
binlog-ignore-db = test
binlog-ignore-db = information_schema
# 只同步哪些数据库,除此之外,其他不同步
binlog-do-db = game
如之前查看master状态时就可以看到只记录了test库,忽略了manual和mysql库。