17.1 MySQL主从介绍
- MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,两者数据实时同步;
- MySQL主从是基于binlog的,主上须开启binlog才能进行主从。
- 主从过程大致有3个步骤
- 主将更改操作记录到binlog里
- 从将主的binlog事件(sql语句)同步到从本机上并记录在relaylog里
- 从根据relaylog里面的sql语句按顺序执行
- 主上有一个log dump线程,用来和从的I/O线程传递binlong
- 从上有两个线程,其中I/O线程用来同步主的binlog并生成relaylog,另外一个sql线程用来把relaylog里面的sql语句落地
MySQL主从原理图:
17.2 准备工作
- 安装mysql
备注:
#设置开机启动
[[email protected] ~]# chkconfig mysqld on
请查阅之前的文章:http://blog.51cto.com/3622288/2056837 12.2小节
17.3 配置主
- 修改my.cnf
[[email protected] ~]# vi /etc/my.cnf
#增加server-id=130和log_bin=taoyuan
socket=/tmp/mysql.sock #如下增加
server-id=12 #可以自定义,如设定为IP地址192.168.0.12 中的12
log_bin=taoyuan
- 修改完配置文件后,启动或重启mysqld服务
[[email protected] ~]# /etc/init.d/mysqld restart;
#查看文件
[[email protected] ~]# cd /data/mysql/
[[email protected] mysql]# ls -lt
-rw-rw---- 1 mysql mysql 34 1月 23 16:57 taoyuan.index
-rw-rw---- 1 mysql mysql 120 1月 23 16:57 taoyuan.000002
-rw-rw---- 1 mysql mysql 143 1月 23 16:57 taoyuan.000001
#上述文件,必须有,不然主从无法完成
- 把mysql可备份并恢复成taoyuan库,作为测试数据
- mysqldump -uroot mysql > /tmp/mysql.sql
- mysql -uroot -e "create database taoyuan"
- mysql -uroot taoyuan < /tmp/mysql.sql
- 创建用作同步数据的用户
#创建用户
mysql> grant replication slave on *.* to ‘repl‘@‘192.168.0.10‘ identified by ‘taoyuan‘;
Query OK, 0 rows affected (0.00 sec)
#锁表,防止再次写入数据
mysql> flush tables with read lock;
Query OK, 0 rows affected (0.03 sec)
#记住位置
mysql> show master status;
+----------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+----------------+----------+--------------+------------------+-------------------+
| taoyuan.000002 | 660574 | | | |
+----------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
17.4 配置从
- 修改配置文件
[[email protected] ~]# vi /etc/my.cnf
#增加server-id 跟主不一样 可以设置成10
#log_bin 不需要设置,主才需要生成二进制文件,从不用
#重启服务
[[email protected] ~]# /etc/init.d/mysqld restart
- 数据同步
#采用复制虚拟机操作,如果没有可以用如下的命令进行同步
scp 192.168.0.12:/tmp/*.sql /tmp/
#恢复库
mysql> create database taoyuan;
Query OK, 1 row affected (0.00 sec)
mysql> create database blog;
Query OK, 1 row affected (0.01 sec)
- 实现主从
mysql> stop slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> change master to master_host=‘192.168.0.12‘, master_user=‘repl‘, master_password=‘taoyuan‘, master_loog_file=‘taoyuan.000002‘, master_log_pos=660574;
Query OK, 0 rows affected, 2 warnings (0.04 sec)
#填写show master status; 显示的信息
mysql> start slave;
Query OK, 0 rows affected (0.01 sec)
- 查看主从是否配置成功
mysql> show slave status\G
#还需到主上执行 unlock tables;
17.5 测试主从同步
- 主上 mysql -uroot taoyuan
- select count(*) from db;
- truncate table db;
- 到从上mysql -uroot aming;
- select count(*) from db;
- 主上继续drop table db;
- 从上查看db表
- 几个配置参数
- 主服务器上
- binlog-do-db= //仅同步指定的库
- binlog-ignore-db= //忽略指定库
- 从服务器上
- replicate_do_db=
- replicate_ignore_db=
- replicate_do_table=
- replicate_ignore_table=
- 如下两个常用
- replicate_wild_do_table= //如taoyuan.%,支持通配符%
- replicate_wild_ignore_table=
mysql主从配置uuid相同错误解决
配置mysql主从时,由于是拷贝的mysql目录,导致主从mysql uuid相同, Slave_IO无法启动,报错信息如下:
The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.
解决办法:修改mysql data 目录下auto.cnf 文件中uuid的值,使两台mysql不同即可,修改后重启mysql服务。
原文地址:http://blog.51cto.com/3622288/2064347
时间: 2024-10-11 07:22:06