MySQL Replication
主从复制介绍
1.主从复制基于binlog来实现的
2.主库发生新的操作,都会记录binlog
3.从库取得主库的binlog进行回放
4.主从复制的过程时异步
搭建主从复制
1.2个或以上的数据库实例
2.主库需要开启二进制日志
3.server_id要不同,区分不同的节点
4.主库需要建立专用的复制用户(replication slave)
5.人为告诉从库一些复制信息(ip,port user pass,二进制日志起点)
6.从库应该开启专门的复制线程
准备多实例
pkill mysqld
systemctl start mysqld 3307
初始化3308
mysqld --initialize-insecure --user=mysql --basedir=/application/mysql --datadir=/data/3308/data
systemctl start mysqld3308
mysql -S /data/3308/mysql.sock
检查3307
mysql -uroot -p123456 -S /data/3307/mysql.sock -e 'select @@port'
检查配置文件
主库:二进制日志是否开启
3307
[mysqld]
basedir=/application/mysql
datadir=/data/3307/data
socket=/data/3307/mysql.sock
port=3307
server_id=7
log_bin=/data/3307/mysql-bin
3308
[mysqld]
basedir=/application/mysql
datadir=/data/3308/data
socket=/data/3308/mysql.sock
port=3308
server_id=8
log_bin=/data/3308/mysql-bin
主库创建复制用户
mysql -uroot -p123456 -S /data/3307/mysql.sock -e "grant replication slave on *.* to repl@'10.0.0.%' identified by '123456';"
主库进行全备
mysqldump -root -p123456 -S /data/3307/mysql.sock -A --master-data=2 --single-transaction -R -E --triggers >/tmp/full.sql
从库
mysql -uroot -p123456 -S /tmp/full.sql
set sql_log_bin=0;
source /tmp/full.sql
告诉从库复制信息
查看起始点
more /tmp/full.sql
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=444;
登陆数据库
mysql -uroot -p123456 -S /data/3308/mysql.scok
CHANGE MASTER TO
MASTER_HOST='10.0.0.51', #主机IP或主机名
MASTER_USER='repl', #用户
MASTER_PASSWORD='123456', #密码
MASTER_PORT=3307, #端口
MASTER_LOG_FILE='mysql-bin.000003', #binlog日志
MASTER_LOG_POS=444, #起点
MASTER_CONNECT_RETRY=10;
从库开启复制线程(IO,SQL)
start slave;
检查主从复制的状态
show status slave \G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
主库创建一个数据库
create database hahaha;
从库检查
show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| backup |
| binlog |
| gtid |
| hahaha |
| mysql |
| perform