17.1 MySQL主从介绍
1. MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,两者数据实时同步的
2. MySQL主从是基于binlog的,主上须开启binlog才能进行主从。
3. 主从过程大致有3个步骤
1)主将更改操作记录到binlog里
2)从将主的binlog事件(sql语句)同步到从本机上并记录在relaylog里
3)从根据relaylog里面的sql语句按顺序执行
4. 主上有一个log dump线程,用来和从的I/O线程传递binlog
5. 从上有两个线程,其中I/O线程用来同步主的binlog并生成relaylog,另外一个SQL线程用来把relaylog里面的sql语句落地
MySQL主从原理图:
1. 在两个centos系统上安装mysql,安装方法见:
11.3 MySQL安装(上);11.4 MySQL安装(中);11.5 MySQL安装下
2. hao1机器和hao2机器都启动mysql:
3. 两个centos系统:设定hao1为主 hao2为从
1. 编辑/etc/my.cnf配置文件:
[root@hao-01 ~]# vim /etc/my.cnf
添加内容:
server-id=128
log_bin=haozc
[root@hao-01 ~]# /etc/init.d/mysqld restart
3. 查看/data/mysql/目录下,生成以(log_bin)haozc开头的文件:
[root@hao-01 ~]# ls /data/mysql/haozc.*
4. 进入 /data/mysql/目录:
[root@hao-01 ~]# cd /data/mysql/
5. 创建一个新的库,库名为haozc:
[root@hao-01 mysql]# mysql -uroot -phaomima -e "create database haozc"
把ceshiku库备份并恢复成haozc库,作为测试数据
6. 备份mysql数据库,做测试:
[root@hao-01 mysql]# mysqldump -uroot -phaomima ceshiku > /tmp/ceshiku.sql
7. 把备份的ceshiku.sql库文件,恢复到haozc库:
[root@hao-01 mysql]# mysql -uroot -phaomima haozc < /tmp/ceshiku.sql
8. hao1机器主 所有mysql数据库备份到/tmp/下:
[root@hao-01 mysql]# mysqldump -uroot -phaomima haozc > /tmp/haozc.sql
[root@hao-01 mysql]# mysqldump -uroot -phaomima mysql2 > /tmp/mysql2.sql
[root@hao-01 mysql]# mysqldump -uroot -phaomima zrlog > /tmp/zrlog.sql
[root@hao-01 mysql]# mysqldump -uroot -phaomima ceshiku > /tmp/ceshiku.sql
9. 进入mysql(root用户下):
[root@hao-01 mysql]# mysql -uroot -phaomima
10. 创建repl用户,针对ip是hao2从ip:
mysql> grant replication slave on *.* to 'repl'@'192.168.211.129' identified by 'haomima';
11. 表状态锁上,暂时不能再写入数据:
mysql> flush tables with read lock;
12. 查看黄框中两个数值,hao2机器从上需要用这两个数值:
mysql> show master status;
1. 编辑/etc/my.cnf配置文件:
[root@hao-02 ~]# vim /etc/my.cnf
添加内容:
server-id=129
[root@hao-01 ~]# /etc/init.d/mysqld restart
3. 用scp命令复制hao1主 /tmp/下所有以.sql备份的mysql数据库文件,粘贴到本机hao2从的/tmp/目录下
[root@hao-02 ~]# scp 192.168.211.128:/tmp/*.sql /tmp/
4. 如果执行找不到mysql -uroot命令,执行下面两条:
[root@hao-02 ~]# alias 'mysql=/usr/local/mysql/bin/mysql'
[root@hao-02 ~]# alias 'mysqldump=/usr/local/mysql/bin/mysqldump'
5. 登录mysql(登录root用户),
[root@hao-02 ~]# mysql -uroot
6. 创建和主一样的mysql用户haozc:
mysql> create database haozc;
mysql> create database mysql2;
mysql> create database ceshiku;
mysql> create database zrlog;
7. 把hao1机器从 同步的.sql 库文件,恢复到创建对应名称库下:
[root@hao-02 mysql]# mysql -uroot haozc < /tmp/haozc.sql
[root@hao-02 mysql]# mysql -uroot mysql2 < /tmp/mysql2.sql
[root@hao-02 mysql]# mysql -uroot ceshiku < /tmp/ceshiku.sql
[root@hao-02 mysql]# mysql -uroot zrlog < /tmp/zrlog.sql
8. 登录mysql,执行下面命令:
(master_password='haomima', master_log_file='haozc.000002',见17.3章12节查看 )
[root@hao-02 ~]# mysql -uroot
mysql> stop slave;
mysql> change master to master_host='192.168.211.128',master_user='repl', master_password='haomima', master_log_file='haozc.000002', master_log_pos=559;
mysql> start slave;
9. 查看主从配置是否成功?
mysql> show slave status\G
10. 在hao1机器从上,把之前锁定的表解锁:
mysql> unlock tables;
17.5 测试主从同步
配置参数
1. 主服务器上:
binlog-do-db= //仅同步指定的库(其他库不同步)
binlog-ignore-db= //忽略指定库(其他库都同步)
2. 从服务器上:
replicate_do_db= //(不常用)
replicate_ignore_db= //(不常用)
replicate_do_table= //(不常用)
replicate_ignore_table= //(不常用)
replicate_wild_do_table= //如aming.%, (支持通配符%)
replicate_wild_ignore_table=
测试主从:
1. hao1机器主上操作:
[root@hao-01 ~]# mysql -uroot -phaomima
切换数据库:
mysql> use haozhucong
查看数据库下所有表:
mysql> show tables;
2. hao2机器从上操作:
[root@hao-02 ~]# mysql -uroot
切换数据库:
mysql> use haozhucong
查看数据库下所有表:
mysql> show tables;
3. hao1机器主 删除表(删除表结构,慎重使用):
mysql> drop table biao1;
4. hao2机器从 查看所有表,是否还有主上删除的表?
mysql> show tables;