MySQL Replication实验记录
1、MySQL 5.7主从复制(无初始数据)
系统资源及组件规划:
节点名称 | 系统名称 | CPU/内存 | 网卡 | 磁盘 | IP地址 | OS |
---|---|---|---|---|---|---|
Master | master | 2C/4G | ens33 | 64G | 192.168.0.10 | CentOS7 |
Slave | slave | 2C/4G | ens33 | 64G | 192.168.0.20 | CentOS7 |
YUM方式安装MySQL 5.7,略
在主数据库上编辑MySQL配置文件:
cat > /etc/my.cnf << EOF
[mysqld]
log-bin=mysql-bin
server-id=10
binlog_do_db=db
binlog_ignore_db=mysql
symbolic-links=0
datadir=/var/lib/mysql
log-error=/var/log/mysqld.log
socket=/var/lib/mysql/mysql.sock
pid-file=/var/run/mysqld/mysqld.pid
EOF
在主数据库上重启MySQL服务:
systemctl restart mysqld
在从数据库上编辑MySQL配置文件:
cat > /etc/my.cnf << EOF
[mysqld]
server-id=20
binlog_do_db=db
binlog_ignore_db=mysql
symbolic-links=0
datadir=/var/lib/mysql
log-error=/var/log/mysqld.log
socket=/var/lib/mysql/mysql.sock
pid-file=/var/run/mysqld/mysqld.pid
EOF
在从数据库上重启MySQL服务:
systemctl restart mysqld
在主从数据库上配置相同的数据库:
CREATE DATABASE db;
CREATE TABLE db.tb (
id int NOT NULL,
name varchar(255) NULL,
PRIMARY KEY (id)
);
在主数据库上创建同步账户:
CREATE USER ‘repl’@‘192.168.0.20’ IDENTIFIED BY ‘PassWord5.7!’;
GRANT REPLICATION SLAVE ON *.* TO ‘repl’@‘192.168.0.20’ IDENTIFIED BY
‘PassWord5.7!’;
FLUSH PRIVILEGES;
在主数据库上查看主数据库状态:
SHOW MASTER STATUS;
在从数据库上执行同步命令,并开启同步功能:
CHANGE MASTER TO
MASTER_HOST=‘192.168.0.10’,MASTER_USER=‘repl’,MASTER_PASSWORD=‘PassWord5.7!’,MASTER_LOG_FILE=‘mysql-bin.000001’,MASTER_LOG_POS=1229;
START SLAVE;
在从数据库上查看从数据库状态:
SHOW PROCESSLIST;
SHOW SLAVE STATUS \G;
在主数据库上查看从数据库状态:
SHOW SLAVE HOSTS;
在主数据库上插入数据:
INSERT INTO db.tb (id,name) VALUES (1,‘MySQL’);
在主从数据库上查看数据库数据:
SELECT * FROM db.tb;
2、MySQL 5.7主从复制(有初始数据)
系统资源及组件规划:
节点名称 | 系统名称 | CPU/内存 | 网卡 | 磁盘 | IP地址 | OS |
---|---|---|---|---|---|---|
Master | master | 2C/4G | ens33 | 64G | 192.168.0.10 | CentOS7 |
Slave | slave | 2C/4G | ens33 | 64G | 192.168.0.20 | CentOS7 |
YUM方式安装MySQL 5.7,略
在主数据库上编辑MySQL配置文件:
cat > /etc/my.cnf << EOF
[mysqld]
log-bin=mysql-bin
server-id=10
binlog_do_db=db
binlog_ignore_db=mysql
symbolic-links=0
datadir=/var/lib/mysql
log-error=/var/log/mysqld.log
socket=/var/lib/mysql/mysql.sock
pid-file=/var/run/mysqld/mysqld.pid
EOF
在主数据库上重启MySQL服务:
systemctl restart mysqld
在从数据库上编辑MySQL配置文件:
cat > /etc/my.cnf << EOF
[mysqld]
server-id=20
binlog_do_db=db
binlog_ignore_db=mysql
symbolic-links=0
datadir=/var/lib/mysql
log-error=/var/log/mysqld.log
socket=/var/lib/mysql/mysql.sock
pid-file=/var/run/mysqld/mysqld.pid
EOF
在从数据库上重启MySQL服务:
systemctl restart mysqld
在主数据库上配置数据库,并插入数据:
CREATE DATABASE db;
CREATE TABLE db.tb (
id int NOT NULL,
name varchar(255) NULL,
PRIMARY KEY (id)
);
INSERT INTO db.tb (id,name) VALUES (1,‘MySQL’);
在主数据库上查看主数据库数据:
SELECT * FROM db.tb;
在主数据库上创建同步账户:
CREATE USER ‘repl’@‘192.168.0.20’ IDENTIFIED BY ‘PassWord5.7!’;
GRANT REPLICATION SLAVE ON *.* TO ‘repl’@‘192.168.0.20’ IDENTIFIED BY
‘PassWord5.7!’;
FLUSH PRIVILEGES;
在主数据库上锁主数据库,并查看主数据库状态:
FLUSH TABLES WITH READ LOCK;
在主数据库上查看主数据库状态:
SHOW MASTER STATUS;
在主数据库上备份数据:
mysqldump --master-data -u root -p db > db.sql
在从数据库上恢复数据:
CREATE DATABASE db;
mysql -u root -p db < /root/db.sql
在从数据库上执行同步命令,并开启同步功能:
CHANGE MASTER TO
MASTER_HOST=‘192.168.0.10’,MASTER_USER=‘repl’,MASTER_PASSWORD=‘PassWord5.7!’,MASTER_LOG_FILE=‘mysql-bin.000001’,MASTER_LOG_POS=1485;
START SLAVE;
在从数据库上查看从数据库状态:
SHOW PROCESSLIST;
SHOW SLAVE STATUS \G;
在主数据库上查看从数据库状态:
SHOW SLAVE HOSTS;
在主数据库上释放锁:
UNLOCK TABLES;
在主数据库上插入数据:
INSERT INTO db.tb (id,name) VALUES (2,‘Redis’);
在主从数据库上查看数据库数据:
SELECT * FROM db.tb;
3、MySQL 5.7主备切换
系统资源及组件规划:
节点名称 | 系统名称 | CPU/内存 | 网卡 | 磁盘 | IP地址 | OS |
---|---|---|---|---|---|---|
Master | master | 2C/4G | ens33 | 64G | 192.168.0.10 | CentOS7 |
Slave | slave | 2C/4G | ens33 | 64G | 192.168.0.20 | CentOS7 |
YUM方式安装MySQL 5.7,略
配置MySQL 5.7主从复制,略
3.1 正常主从切换
在主数据库上锁定写操作:
FLUSH TABLES WITH READ LOCK;
在从数据库上创建同步账户:
CREATE USER ‘repl’@‘192.168.0.10’ IDENTIFIED BY ‘PassWord5.7!’;
GRANT REPLICATION SLAVE ON *.* TO ‘repl’@‘192.168.0.10’ IDENTIFIED BY
‘PassWord5.7!’;
FLUSH PRIVILEGES;
在从数据库上停止IO_THREAD线程:
STOP SLAVE IO_THREAD;
在从数据库上查看从数据库状态:
SHOW SLAVE STATUS \G;
在从数据库上编辑MySQL配置文件,开启log-bin:
[mysqld]
log-bin=mysql-bin
在从数据库上重启MySQL服务:
systemctl restart mysqld
在从数据库上激活从数据库,变为主数据库:
STOP SLAVE;
RESET MASTER;
RESET SLAVE ALL;
在原从数据库上查看主数据库状态:
SHOW MASTER STATUS;
在主数据库上执行同步命令,并开启同步功能,变为从数据库:
CHANGE MASTER TO
MASTER_HOST=‘192.168.0.20’,MASTER_USER=‘repl’,MASTER_PASSWORD=‘PassWord5.7!’,MASTER_LOG_FILE=‘mysql-bin.000001’,MASTER_LOG_POS=154;
START SLAVE;
在原主数据库上查看从数据库状态:
SHOW PROCESSLIST;
SHOW SLAVE STATUS \G;
在原主数据库上解锁定写操作:
UNLOCK TABLES;
在主数据库上插入数据:
INSERT INTO db.tb (id,name) VALUES (3,‘NoSQL’);
在主从数据库上查看数据库数据:
SELECT * FROM db.tb;
3.2 宕机主从切换
在从数据库上编辑MySQL配置文件,开启log-bin:
[mysqld]
log-bin=mysql-bin
在从数据库上重新启动MySQL:
systemctl restart mysqld
在从数据库上激活从数据库,变为主数据库:
STOP SLAVE;
RESET MASTER;
在主数据库上插入数据:
INSERT INTO db.tb (id,name) VALUES (3,‘NoSQL’);
在主数据库上查看数据库数据:
SELECT * FROM db.tb;