项目描述:构建一个简单的MySQL主从复制集群
项目环境:
2台2c/4G的服务器,centos7.9,mysql 5.7
项目描述:
为了提升MySQL的并发能力构建一个简单的MySQL集群,实现读写分离功能,大大提升MySQL集群的业务处理能力。 同时深入学习MySQL的整体部署何对集群架构的理解。
项目步骤:
1、准备好2台安装好系统的机器,使用一键部署脚本二进制版本的MySQL,并且设置好my.cnf配置文件的内容。
2、在master服务器上开启二进制日志和配置server_id,从服务器上配置也配置server_id
[root@mysql ~]# cat /etc/my.cnf
[mysqld_safe]
[client]
socket=/data/mysql/mysql.sock
[mysqld]
socket=/data/mysql/mysql.sock
port = 3306
open_files_limit = 8192
innodb_buffer_pool_size = 512M
character-set-server=utf8
log_bin
server_id = 1 # slave主机上为2
[mysql]
auto-rehash
prompt=\u@\d \R:\m mysql>
3、创建用来复制二进制文件的用户并赋权。
root@(none) 21:28 mysql>create user 'sc_slave'@'192.168.169.147' identified by '123456';
Query OK, 0 rows affected (0.01 sec)
root@(none) 21:29 mysql>grant replication slave on *.* to 'sc_slave'@'192.168.169.147';
Query OK, 0 rows affected (0.00 sec)
4、在master上面做一个全备,导出数据到slave上,保持主备机数据一致
主(192.168.168.158)上操作(导出数据):
[root@mysql ~]# mysqldump -uroot -p'Sanchuang123#' --all-databases >/root/all_db.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.
[root@mysql ~]# scp /root/all_db.sql root@192.168.169.147:/root
备(192.168.168.147)上操作(导入数据):
[root@node1 ~]# mysql -uroot -p'Sanchuang123#' < all_db.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
5、在slave上配置去master上拉去二进制日志的用户信息和日志文件的名称和位置号
root@(none) 21:47 mysql>show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 | 631 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
root@(none) 21:48 mysql>flush logs;
Query OK, 0 rows affected (0.01 sec)
root@(none) 21:48 mysql>show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000004 | 154 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
在slave上启用master信息
root@(none) 05:48 mysql> CHANGE MASTER TO MASTER_HOST='192.168.169.158' ,
-> MASTER_USER='sc_slave',
-> MASTER_PASSWORD='123456',
-> MASTER_PORT=3306,
-> MASTER_LOG_FILE='mysql-bin.000004',
-> MASTER_LOG_POS=154;
Query OK, 0 rows affected, 1 warning (0.01 sec)
6、在master和slave上都关闭防火墙和SELinux
root@mysql ~]# service firewalld stop
Redirecting to /bin/systemctl stop firewalld.service
[root@mysql ~]# systemctl disable firewalld
[root@mysql ~]# getenforce
Disabled
7、在slave服务器上启动slave服务,查看IO线程和SQL线程是否正常排错,验证主从复制的效果
root@(none) 05:56 mysql>start slave;
Query OK, 0 rows affected (0.00 sec)
root@(none) 05:57 mysql>show slave status\G; # 启动效果
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.169.158
Master_User: sc_slave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000004
Read_Master_Log_Pos: 154
Relay_Log_File: node1-relay-bin.000002
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql-bin.000004
Slave_IO_Running: Yes # IO线程已开启
Slave_SQL_Running: Yes # SQL线程已开启
注:清除从服务器上填写的主服务器的信息
stop slave
reset slave all
思考问题
1、如果主挂了,如何将备变成主?
目前只能手动 停止从服务器上的的slave服务,把业务的协和查询操作都切到从服务器上,提升从为主服务器,在搞一台服务器做从,认原来的从为主。要求原来的从服务器需要开启二进制日志。
1、stop slave
2、reset master
3、开启二进制日志
4、建立授权复制的用户
5、再启动一台机器做从,配置master信息去拉取二进制日志
2、是否有自动进行主从切换的操作?
1、自己写脚本完成
1. 监控master
在另外一台机器扫描端口: nc 3306
直接访问 mysql -p .. -u .. -p..
每秒监控一次
2、是否有第三方软件完成
3、怎么在MySQL提供服务服务的时候搭建主从复制?
就是在线搭建主从复制