grant replication slave, replication client on *.* to repl@’192.168.%.%’ identified by ‘123456’;
3)备份master上的数据库,迁移到slave上:
[root@localhost ~]# mysqldump -uroot -p --routines --flush-logs --master-data=2 --databases db2 db1>/root/backup.sql
Enter password:
[root@localhost ~]# scp /root/backup.sql 192.168.137.9:/tmp/backup.sql
The authenticity of host '192.168.137.9 (192.168.137.9)' can't be established.
RSA key fingerprint is a4:cd:c0:13:d1:8c:c0:a5:e7:c4:43:b5:95:17:af:d3.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.137.9' (RSA) to the list of known hosts.
root@192.168.137.9's password:
backup.sql
因为slave的搭建需要一致性的备份,所以需要启用 --lock-all-tables(master-data=1/2会自动启用--lock-all-tables)或者--single-transaction;
另外还需要知道该一致性备份的数据,对应的master上的binary log的文件名,以及在该文件中的position,所以必须启用 master-data选项。
因为--master-data会启用--lock-all-tables 所以数据才是一致性的;但是导致了全局锁,不能进行任何修改操作;下面我们使用--single-transaction进行优化:
mysqldump -uroot -p --routines --flush-logs --single-transaction --master-data=2 --databases db1 db2 > /root/backup.sql; (--flush-logs非必须)
这样全局锁仅仅在备份的开始短暂的持有。不会再备份的整个过程中持有全局锁。
4)在slave上执行备份的脚本,然后连上master,开启复制线程:
执行sql脚本:
mysql> source /tmp/backup.sql
找到 --master-data 输出的 binary log 的文件名和postion:
[root@localhost ~]# head -50 /tmp/backup.sql
......
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Position to start replication or point-in-time recovery from
--
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000010', MASTER_LOG_POS=809;
执行 change master to, start slave:
在salve上执行命令开始复制: mysql> change master to master_host='192.168.137.8', master_user='repl', master_password='123456', -> master_log_file='mysql-bin.000010', master_log_pos=809; Query OK, 0 rows affected, 2 warnings (0.09 sec) mysql> start slave; Query OK, 0 rows affected (0.04 sec)
最后在slave上查看复制线程的状态:
mysql> show slave status\G ... ... Slave_IO_Running: Yes Slave_SQL_Running: Yes ......
slave_IO_Runing 和 slave_sql_runing 状态都是yes表示搭建成功。
5)replication涉及到的三个线程:
1> master上的 binlog dump(dump线程),即读取master上的binlog,发送到slave上的线程。
2> slave上的IO线程:读取slave上的relay log。
3> slave上的sql线程:执行IO线程读取的relay log的线程。
4. 使用mysqldump的备份进行 还原
下面使用 mysqldump 进行一个备份,然后删除 datadir, 然后使用备份sql脚本和binary log进行还原的过程。
1)首先进行一个全备:
mysqldump -uroot -p --single-transaction --master-data=2 --routines --flush-logs --databases gs ngx_lua > gs_ngx_lua_backup.sql;
数据库有两个库: gs , ngx_lua.