现在数据量越来越大了,数据库主从及读写分离也越来越普及了,我们直接来看吧
1、主从原理
- 在主库上把数据更改记录到二进制日志中(Binary Log)中,这些记录称为二进制日志事件。
- 从库通过IO线程将主库上的日志复制到自己的中继日志(Relay Log)中。
- 从库通过SQL线程读取中继日志中的事件,将其重放到自己数据上。
2、主从配置
首先准备两台服务器 我们就分别叫master(主 192.168.1.30) 和savel(从 192.168.1.40) 吧
打开master服务器上my.cnf(不知道在哪的 mysql --help|grep my.cnf 用这个命令)
在[mysqld]加入下面的内容:
# 服务的唯一编号 server-id = 1
# 开启mysql binlog功能 log-bin = /var/log/mysql/mysql-bin.log
# binlog记录内容的方式,记录被操作的每一行 binlog_format = ROW
# 减少记录日志的内容,只记录受影响的列 binlog_row_image = minimal
# 指定需要复制的数据库名为jgyw binlog-do-db = tf
# 保存日志天数expire_logs_days = 10
# 二进制日志大小max_binlog_size = 100M
保存后 service mysql restart 重启mysql
然后进入master mysql 创建从库同步数据的账号
grant replication slave on *.* to 'tf'@'192.168.1.40' identified by 'tf@123';
tf是账号,192.168.1.40是从库ip,tf@123是登录密码
如果原理的数据库有数据,则需要将原数据导出
1.先FLUSH TABLES WITH READ LOCK; 锁住表
2.在不退出该终端的情况下(否则锁表会失效),再次开启一个终端直接打包压缩数据文件或 者使用mysqldump工具来导出数据:#mysqldump-uroot -h 127.0.0.1 --opt -R XXXXXX>/data/mysql/backup/XXXXXX.sql
3.备份数据库到从数据库#tar-czvf XXXXXX.tar.gz XXXXXX.sql #scp XXXXXX.tar.gz root@10.7.70.42:/data/mysql/backup
4. UNLOCKTABLES; 解锁
查询mysql执行情况 show master status\G;
File: mysql-bin.000002 // 这两个记一下 等下要用
Position: 2380 // 还有这个
Binlog_Do_DB: jgyw
Binlog_Ignore_DB: Executed_Gtid_Set: 1 row in set (0.00 sec)
接下来配置从服务器
跟前面一样,先修改my.cnf 不过要改一下 server-id =2 (多少都可以 不能跟主库相同),
service mysql restart 重启mysql
进入mysql
1.SHOW VARIABLES LIKE 'server_id'; 先查看一下server-id 是否和设置的不同,不同的话说明配置没改成功,可以临时SET GLOBAL server_id=2; 设置一下 ,不过mysql重启后会消失,尽快配置写好
2.建立联系 (都是主表设置的信息)
CHANGE MASTER TO MASTER_HOST='XX.XX.XX.XX', //主数据库的ip地址
->MASTER_USER='repl',
->MASTER_PASSWORD='repl',
->MASTER_LOG_FILE='mysql-bin.000002', //这里根据主服务器的binlog和id设置
->MASTER_LOG_POS=2380; //
3. start slave; 开启同步
4.show slave status\G; 查看同步情况
Slave_IO_Running和Slave_SQL_Running的状态都为Yes时,说明从库配置成功。