Centos7 Mysql5.6.40 主从服务搭建
往期历史
创建多实例环境
- 创建多实例目录;
[root@43812cb2f48a /]# mkdir -p /data/330{7..9}/data
- 目录授权;
[root@43812cb2f48a /]# chown -R mysql.mysql /data
- 创建mysql配置文件
[root@43812cb2f48a /]# vim /data/3307/my.cnf
[mysqld]
server_id=7
port=3307
basedir=/application/mysql
datadir=/data/3307/data
log_bin=/data/3307/mysql-bin
log_error=/data/3307/mysql.log
socket=/data/3307/mysql.sock
skip_name_resolve
[root@43812cb2f48a /]# vim /data/3308/my.cnf
[mysqld]
server_id=8
port=3308
basedir=/application/mysql
datadir=/data/3308/data
log_bin=/data/3308/mysql-bin
log_error=/data/3308/mysql.log
socket=/data/3308/mysql.sock
skip_name_resolve
[root@43812cb2f48a /]# vim /data/3309/my.cnf
[mysqld]
server_id=9
port=3309
basedir=/application/mysql
datadir=/data/3309/data
log_bin=/data/3309/mysql-bin
log_error=/data/3309/mysql.log
socket=/data/3309/mysql.sock
skip_name_resolve
- 初始化数据;
[root@43812cb2f48a /]# /application/mysql/scripts/mysql_install_db --user=mysql --basedir=/application/mysql --datadir=/data/3307/data
[root@43812cb2f48a /]# /application/mysql/scripts/mysql_install_db --user=mysql --basedir=/application/mysql --datadir=/data/3308/data
[root@43812cb2f48a /]# /application/mysql/scripts/mysql_install_db --user=mysql --basedir=/application/mysql --datadir=/data/3309/data
- 启动数据库;
[root@43812cb2f48a /]# mysqld_safe --defaults-file=/data/3307/my.cnf &
[root@43812cb2f48a /]# mysqld_safe --defaults-file=/data/3308/my.cnf &
[root@43812cb2f48a /]# mysqld_safe --defaults-file=/data/3309/my.cnf &
错误: 可能遇到mysql写日志没权限或者日志文件不存在
解决办法执行:
[root@43812cb2f48a /]# touch /data/330{7..9}/mysql.log
[root@43812cb2f48a /]# chown -R mysql.mysql /data/*
- 查看是否启动多实例成功,查看端口号;
[root@43812cb2f48a /]# netstat -lnp|grep 330
tcp6 0 0 :::3307 :::* LISTEN 273/mysqld
tcp6 0 0 :::3308 :::* LISTEN 461/mysqld
tcp6 0 0 :::3309 :::* LISTEN 652/mysqld
unix 2 [ ACC ] STREAM LISTENING 29814 652/mysqld /data/3309/mysql.sock
unix 2 [ ACC ] STREAM LISTENING 25574 273/mysqld /data/3307/mysql.sock
unix 2 [ ACC ] STREAM LISTENING 30745 461/mysqld /data/3308/mysql.sock
主从搭建过程
- 主(master):127.0.0.1:3307
从(slave):127.0.0.1:3308 - 主库中进行创建复制用户(权限是replication slave)
[root@43812cb2f48a /]# mysql -S /data/3307/mysql.sock
#mysql授权语句
mysql>grant replication slave on *.* to repl@'127.0.0.%' identified by '123';
- 全备主库, 恢复到从库
- 主库备份
[root@43812cb2f48a /] mysqldump -S /data/3307/mysql.sock -A --master-data=2 -R --triggers --single-transaction >/tmp/full.sql
- 从库恢复
[root@43812cb2f48a /]# mysql -S /data/3308/mysql.sock
mysql>set sql_log_bin=0;
mysql>source /tmp/full.sql
- 从库开启复制
- 告诉从库从哪个位置号开始自动复制
[root@43812cb2f48a /]# head -30 /tmp/full.sql
[root@43812cb2f48a /]# mysql -S /data/3308/mysql.sock
mysql> help CHANGE MASTER TO #查看执行sql命令
mysql> CHANGE MASTER TO
MASTER_HOST='127.17.0.2',
MASTER_USER='repl', #复制用户
MASTER_PASSWORD='123',
MASTER_PORT=3307,
MASTER_LOG_FILE='msyql-bin.000002',#主库bin日志
MASTER_LOG_POS=325,
MASTER_CONNECT_RETRY=10; #连接重试次数
mysql> start slave #启动主从
mysql> show slave status \G #主从复制监控(查看主从是否启动成功)
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
两个为yes代表主从搭建成功啦!!!
- 主库状态查看
[root@43812cb2f48a /]# mysql -S /data/3307/mysql.sock
mysql> show processlist;
mysql> show master status;
- 线程管理
启动和关闭两个线程
[root@43812cb2f48a /]# mysql -S /data/3308/mysql.sock
mysql> reset slave all; #如果连接信息填错可以重置master.info 在执行change master to
mysql> stop slave;
mysql> start slave;
单独启动关闭一个线程
[root@43812cb2f48a /]# mysql -S /data/3308/mysql.sock
mysql> stop slave io_thread;
mysql> stop slace sql_thread;
mysql> start slave io_thread;
mysql> start slace sql_thread;
复制工作原理
mysql 主从架构原理图
文件
M:
binlog:记录主库数据变化
S:
relay-log: 中继日志,储存从主库请求的二进制日志的储存位置
master.info:储存用户,密码,ip,port,记录上次请求过的binlog位置
relay-log.info:记录了上次sql线程执行过的relaylog的位置点
线程:
M:
dump(IO)thread(投递线程)
主库发从二进制日志给从库的线程
S:
IO thread:
请求binlog,接收binlog的线程