先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上运维知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip1024b (备注运维)
正文
一、准备工作
1. 安装配置Docker
各位看官根据自己的操作系统和喜好选择相应的Docker进行安装和配置。使用docker pull命令拉取mysql 8的镜像文件。
> docker pull mysql:8
2. 准备MySQL相关的配置和数据目录
本次演示以一主二从共三台服务器为例进行演示。在当前目录创建三个配置文件目录和三个数据目录:
> cd /Users/Tom/docker
>
> mkdir mysqlconf
> mkdir mysqlconf/master
> mkdir mysqlconf/slave1
> mkdir mysqlconf/slave2
>
> mkdir mysqldata
> mkdir mysqldata/master
> mkdir mysqldata/slave1
> mkdir mysqldata/slave2
>
> tree -L 2
.
├── README.md
├── mysqlconf
│ ├── master
│ ├── slave1
│ └── slave2
└── mysqldata
├── master
├── slave1
└── slave2
运行MySQL容器并从中拷贝MySQL配置文件到本地备用,配置文件目录:/etc/my.cnf
。
# 语法:
docker cp <containerId>:/path/to/file /path/on/host
# 示例:temp_mysql8是本次启动的MySQL容器名称
docker cp temp_mysql8:/etc/my.cnf .
拷贝配置文件到已创建的配置文件目录:
cp my.cnf mysqlconf/master/my.cnf
cp my.cnf mysqlconf/slave1/my.cnf
cp my.cnf mysqlconf/slave2/my.cnf
> tree -L 3
.
├── README.md
├── mysqlconf
│ ├── master
│ │ └── my.cnf
│ ├── slave1
│ │ └── my.cnf
│ └── slave2
│ └── my.cnf
└── mysqldata
├── master
├── slave1
└── slave2
二、基于日志点的主从复制
1. 配置Master服务器
1.1 修改配置文件
编辑主服务器的MySQL配置文件mysqlconf/master/my.cnf
,添加下列配置项:
[mysqld]
server-id=1
log-bin=mysql-binlog
binlog-do-db=your-database-name
default_authentication_plugin=mysql_native_password
1.2. 在docker中启动Master节点
docker run -P --name mysqlmaster \
-v $PWD/mysqldata/master:/var/lib/mysql \
-v $PWD/mysqlconf/master/my.cnf:/etc/my.cnf \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:8
参数含义说明:
-P
:本机与容器的端口映射--name
:为容器指定一个名称mysqlmaster
MYSQL_ROOT_PASSWORD
:指定MySQL中root用户的密码为123456-d
:指定容器运行方式为后台运行
容器启动后登录MySQL并检查配置是否生效:
$> docker exec -it mysqlmaster bash
# mysql -uroot -p123456
mysql> show variables like 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 1 |
+---------------+-------+
如果登录MySQL提示错误:
Access denied for user 'root'@'localhost' (using password: YES)
,可能是你密码输入错误,也可能是加密插件导致的。MySQL8使用的默认加密插件是 caching_sha2_password,而MySQL5.6使用的是mysql_native_password,当你在控制台使用明文密码登录的时候走的是mysql_native_password加密,而数据库记录的是caching_sha2_password加密后的密码。两个密文不一致导致登录失败。解决办法是在配置文件中指定加密插件:default_authentication_plugin=mysql_native_password
1.3. 创建用户并授权
在Master上创建一个复制用户并授权
mysql> CREATE USER 'repl'@'%' identified by 'password';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
# 刷新用户权限信息
mysql> FLUSH PRIVILEGES;
# 查看Master状态
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 | 1531 | | | |
+------------------+----------+--------------+------------------+-------------------+
执行结果中显示二进制日志文件为mysql-bin.000003,日志位置为1531。Slave就是从这个日志点开始进行复制的。
2. 配置Slave1服务器
2.1. 修改配置
编辑从服务器slave1的MySQL配置文件mysqlconf/slave1/my.cnf
,添加下列配置项:
[mysqld]
server-id=2
relay-log=mysql-relay-bin
replicate-do-db=your_database_name
2.2. 启动服务
docker run -P --name mysqlslave1 \
-v $PWD/mysqldata/slave1:/var/lib/mysql \
-v $PWD/mysqlconf/slave1/my.cnf:/etc/my.cnf \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:8
容器启动后登录MySQL并检查配置是否生效:
$> docker exec -it mysqlslave1 bash
# mysql -uroot -p123456
mysql> show variables like 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 2 |
+---------------+-------+
2.3. 指定Master
指定Master的信息,包括IP、用户、密码、日志文件和位置。
mysql> change master to master_host='172.17.0.2', master_user='repl', master_password='123456', master_log_file='mysql-bin.000003', master_log_pos=828
可以使用
docker inspect mysqlmaster | grep IPAddress
查看Master节点的IP信息
2.4. 开始复制
mysql> start slave;
mysql> show slave status \G;
...
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
...
最关键的是这两项信息:
- Slave_IO_Running:
- Slave_SQL_Running:
3. 配置Slave2服务器
3.1. 修改配置
编辑从服务器slave2的MySQL配置文件mysqlconf/slave2/my.cnf
,添加下列配置项:
[mysqld]
server-id=3
relay-log=mysql-relay-bin
replicate-do-db=your_database_name
3.2. 启动服务
docker run -P --name mysqlslave2 \
-v $PWD/mysqldata/slave2:/var/lib/mysql \
-v $PWD/mysqlconf/slave2/my.cnf:/etc/my.cnf \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:8
容器启动后登录MySQL并检查配置是否生效:
$> docker exec -it mysqlslave2 bash
# mysql -uroot -p123456
mysql> show variables like 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 3 |
+---------------+-------+
3.3. 指定Master
指定Master的信息,包括IP、用户、密码、日志文件和位置。
mysql> change master to master_host='172.17.0.2', master_user='repl', master_password='123456', master_log_file='mysql-bin.000003', master_log_pos=828
3.4. 开始复制
mysql> start slave;
mysql> show slave status \G;
...
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
...
最关键的是这两项信息:
- Slave_IO_Running:
- Slave_SQL_Running:
4. 测试效果
4.1. 更新数据
在Master节点上创建一个新的数据库和表,并任意插入一条数据:
mysql> create database test;
mysql> use test;
mysql> create table user(id bigint(20) primary key, name varchar(20));
mysql> insert into user value(1, 'Tom');
mysql> select * from user;
4.2. 查看同步结果
在Slave1和Slave2节点查看test.user
表的数据:
mysql> select * from test.user;
+----+------+
| id | name |
+----+------+
| 1 | Tom |
+----+------+
结果表明主从复制环境配置成功。
三、基于GTID的主从复制
基于GTID的主从复制配置步骤跟基于日志点的主从复制配置基本相似,差别在于配置和指定Master时使用的命令参数略有差异。具体如下:
1. Master配置文件
打开配置文件mysqlconf/master/my.cnf
,在[mysqld]部分添加配置:
[mysqld]
server-id=1
# 启动二进制日志
log-bin=mysql-bin
binlog_format=row
# 开启GTID模式
gtid_mode=on
# 强制GTID一致性
enforce_gtid_consistency=true
- binlog_format:指定二进制日志格式为row
2. Slave配置文件
打开配置文件mysqlconf/slave1/my.cnf
和mysqlconf/slave2/my.cnf
,分别在[mysqld]部分添加配置:
# slave1节点配置
server_id=2
log-bin=mysql-bin
log_slave_updates=1
gtid_mode=on
enforce_gtid_consistency=true
master_info_repository=TABLE
relay_log_info_repository=TABLE
read_only=ON
- log_slave_updates:参数决定了在从服务器上是否将复制事件写入二进制日志文件(Binary Log)。默认情况下,这个参数是0,表示关闭,也就是说从服务器不会将复制事件写入二进制日志。
- relay_log_info_repository:指定中继日志的存储方式,默认是文件,这样配置是使用了两个表,是INNODB存储引擎,好处是当出现数据库崩溃时,利用INNODB引擎事务的特点,对这两个表进行恢复,以保证从服务器可以从正确位置恢复数据。
- read_only:指定从服务器是否只读,此参数对超级用户无效,并且不会影响从服务器的复制。这个参数主要保证从服务器的数据安全性。
### 最后的话
最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!
### 资料预览
给大家整理的视频资料:
![](https://img-blog.csdnimg.cn/img_convert/2672d6ea31dcac8885af42c71db9670d.png)
给大家整理的电子书资料:
![](https://img-blog.csdnimg.cn/img_convert/a16710d7ab74f3a2cae6194bb1f59251.png)
**如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!**
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注运维)**
![img](https://img-blog.csdnimg.cn/img_convert/ecf0cbbd97a91d8f71c2db65d1c9cde7.jpeg)
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!
### 资料预览
给大家整理的视频资料:
[外链图片转存中...(img-kgFhY9S6-1713164060654)]
给大家整理的电子书资料:
[外链图片转存中...(img-uvqAxeGg-1713164060655)]
**如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!**
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注运维)**
[外链图片转存中...(img-t7NU8TvT-1713164060655)]
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**