mysql 主从复制
MySQL复制其实就是把数据从一个节点(master) 拷贝到另一个节点(slaves), 当然根据应用架构的不同,采用的方式也不同,MySQL服务器之间的复制使用的是二进制日志机制。
实验环境
rhel 5.8 + mysql-5.5.28-linux2.6-i686.tar.gz
主 172.16.111.1
从 172.16.111.123
首先在两台机器上安装mysql 测试可以正常启动
复制原理:
1, 主服务器将开启一个dump线程 作用是将二进制日志中的数据读取出来发送给
从服务器中的I/O线程
2,从服务器的I/O线程接受到dump线程发送过来的数据并且写入本地的中继日志中
一旦中继日志中有了新的数据从发服器将启动另一个线程 SQL线程
SQL线程作用 读取中继日志中新增的数据并逐行在数据库中执行
从而完成主从复杂
配置如下:
主服务器配置
vim /etc/my.cnf
server-id = 1 可以修改默认也可以 但是一定要和从服务器的id 不一样
这里默认 一会去修改从服务器的server-id
二进制日志 一定要开启默认都是开启的
授予一个用户具有复制权限
mysql> grant replication slave,replication client on *.* to kaka@'172.16.111.123' identified by 'kaka';
从服务器配置
vim /etc/my.cnf
修改server-id = 10
二进制日志 这里可以关闭 因为这是复制过来的数据没必要将这些数据再写入二进制中
开启也可以
开启中继日志 relay-log=relay-bin
relay-log-index=relay-bin.index
查看主服务器使用的二进制日志 及位置
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000004 | 190 | | |
+------------------+----------+--------------+------------------+
进入mysql 执行如下命令
mysql> change master to master_host='172.16.111.1', master_user='kaka', master_password='kaka', master_log_file='mysql-bin.000004', master_log_pos=190;
指定主服务器的ip地址 具有复制权限的用户名和密码 以及从哪个二进制日志的什么位置开始复制
mysql> start slave; 开启从服务器线程
查看从服务器信息
- mysql> show slave status\G;
- *************************** 1. row ***************************
- Slave_IO_State: Waiting for master to send event
- Master_Host: 172.16.111.1
- Master_User: kaka
- Master_Port: 3306
- Connect_Retry: 60
- Master_Log_File: mysql-bin.000004
- Read_Master_Log_Pos: 273
- Relay_Log_File: relay-bin.000002
- Relay_Log_Pos: 336
- Relay_Master_Log_File: mysql-bin.000004
- Slave_IO_Running: Yes
- Slave_SQL_Running: Yes
- Replicate_Do_DB:
- Replicate_Ignore_DB:
- Replicate_Do_Table:
- Replicate_Ignore_Table:
- Replicate_Wild_Do_Table:
- Replicate_Wild_Ignore_Table:
- Last_Errno: 0
- Last_Error:
- Skip_Counter: 0
- Exec_Master_Log_Pos: 273
- Relay_Log_Space: 486
- Until_Condition: None
- Until_Log_File:
- Until_Log_Pos: 0
- Master_SSL_Allowed: No
- Master_SSL_CA_File:
- Master_SSL_CA_Path:
- Master_SSL_Cert:
- Master_SSL_Cipher:
- Master_SSL_Key:
- Seconds_Behind_Master: 0
- Master_SSL_Verify_Server_Cert: No
- Last_IO_Errno: 0
- Last_IO_Error:
- Last_SQL_Errno: 0
- Last_SQL_Error:
- Replicate_Ignore_Server_Ids:
- Master_Server_Id: 1
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
这两个线程已经启动 OK
=================================================
注意事项:
主:开启二进制日志(默认)
保证server-id不于从服务器相同
创建复制权限用户
从:关闭二进制日志 开启中继日志
同样server-id不能相同
如果数据库中已有运行的数据 需要在主服务器上做一次完全备份
恢复到从服务器中
然后指定主服务器二进制日志和事件位置开始复制