在 CentOS 上安装 Go 语言 (Golang) 的步骤如下
步骤一:更新系统
首先,确保系统的软件包是最新的。打开终端并执行以下命令:
sudo yum update -y
步骤二:下载 Go 语言安装包
前往 Go 语言官方网站 下载适用于 Linux 的最新版本安装包。你也可以使用 wget 命令直接下载。例如:
wget https://golang.org/dl/go1.20.1.linux-amd64.tar.gz
wget https://go.dev/dl/go1.22.4.linux-amd64.tar.gz
请根据最新的 Go 版本替换 URL 中的版本号。
步骤三:解压安装包
下载完成后,将压缩包解压到 /usr/local 目录:
tar zxvf go1.8.linux-amd64.tar.gz -C /usr/local
或
sudo tar -C /usr/local -xzf go1.20.1.linux-amd64.tar.gz
步骤四:设置环境变量
要使 Go 语言生效,需要配置环境变量。打开你的 shell 配置文件,例如 .bashrc 或 .profile,并添加以下行:
vim /etc/profile
# 添加如下内容
# GO相关
export GOROOT=/usr/local/go
export GOBIN=$GOROOT/bin
export PATH=$PATH:$GOBIN
# 将用户GOBIN加入到PATH
export GOPATH=/home/iuu/Developer/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOBIN
执行以下命令以使配置文件生效:
# 完成后执行
source /etc/profile
步骤五:验证安装
验证 Go 语言是否成功安装,可以通过以下命令检查:
go version
如果安装成功,你会看到类似如下的输出:
go version go1.20.1 linux/amd64
番外篇
为了方便管理 Go 项目,你可以设置一个 Go 工作区。创建一个工作目录,例如:
mkdir -p /home/iuu/Developer/go/{bin,src,pkg}
然后在你的 shell 配置文件中添加以下行:
export GOPATH=/home/iuu/Developer/go
export PATH=$PATH:$GOPATH/bin
再次执行 source ~/.bashrc 或 source ~/.profile 使配置生效。
现在你已经成功在 CentOS 上安装并配置了 Go 语言环境,可以开始编写和运行 Go 语言程序了。
Linux下安装PHP扩展pdo_oci和oci8
CentOS服务器上已有相关环境:ngxin、php8.3。需要安装pdo_oci和oci8。
下边记录一下详细步骤
安装oracle客户端
Version 23.4.0.0.0 (Requires glibc 2.14)
https://download.oracle.com/otn_software/linux/instantclient/2340000/instantclient-basic-linux.x64-23.4.0.24.05.zip
https://download.oracle.com/otn_software/linux/instantclient/2340000/instantclient-sdk-linux.x64-23.4.0.24.05.zip
选择这上面这两个安装包,下载到/usr/local/src 然后解压:
unzip instantclient-basic-linux.x64-23.4.0.24.05.zip
unzip instantclient-sdk-linux.x64-23.4.0.24.05.zip
然后进入到解压后的目录:cd instantclient_11_2/将下面的三个文件作一下连接
ln -s libnnz11.so libnnz.so
ln -s libclntsh.so.11.1 libclntsh.so
ln -s libocci.so.11.1 libocci.so
然后将解压后的目录移动到 /usr/local/lib目录下,改名为‘instantclient'
mv ./instantclient_11_2 /usr/local/lib/instantclient
安装oci8扩展
进入php的源码安装包:cd /usr/local/src/php-8.3/ext/oci8/
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config --with-oci8=shared,instantclient,/usr/local/lib/instantclient
make && make install
进入cd /usr/local/php/lib/php/extensions/no-debug-zts-20160303/查看有oci8.so这个文件说明安装成功
在php.ini配置中添加一句extension=oci8.so
安装pdo_oci扩展
进入php的源码安装包:cd /usr/local/src/php-7.1.25/ext/pdo_oci
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config --with-pdo-oci=instantclient,/usr/local/lib/instantclient
make && make install
进入cd /usr/local/php/lib/php/extensions/no-debug-zts-20160303/查看有pdo_oci.so这个文件说明安装成功
在php.ini配置中添加一句extension=pdo_oci.so
查看phpinfo如果有oci8和pdo_oci的话就添加成功了
基于Docker 实现MySql的主从复制
1、新建主服务容器实例3310
================================
docker run -d -p 3310:3306 --name mysql-master \
-v /Users/iuu/Developer/docker/mysql/master/log:/var/log/mysql \
-v /Users/iuu/Developer/docker/mysql/master/data:/var/lib/mysql \
-v /Users/iuu/Developer/docker/mysql/master/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=root \
-e LANG="C.UTF-8" \
mysql:latest
================================
2、新建my.cnf
================================
[mysqld]
# 设置server_id 同一局域网中要唯一
server_id=101
# 无需开启二进制日志文件的数据库
# 多个数据库则要重复设置
binlog-ignore-db=mysql
# 打开二进制日志功能.
# 在复制(replication)配置中,作为MASTER主服务器必须打开此项
# 如果你需要从你最后的备份中做基于时间点的恢复,你也同样需要二进制日志.
log-bin=mall-mysql-bin
# 在一个事务中binlog为了记录SQL状态所持有的cache大小
# 如果你经常使用大的,多声明的事务,你可以增加此值来获取更大的性能.
# 所有从事务来的状态都将被缓冲在binlog缓冲中然后在提交后一次性写入到binlog中
# 如果事务比此值大, 会使用磁盘上的临时文件来替代.
# 此缓冲在每个连接的事务第一次更新状态时被创建
binlog_cache_size=10M
# binlog日志格式
# mysql默认采用statement,建议使用mixed
binlog_format=mixed
# 超过指定天数的binlog将被删除
# 二进制日志过期时间设置为7天(7天 = 7 * 24 * 60 * 60 秒)
binlog_expire_logs_seconds = 604800
# 主从复制跳过错误
# 1062 指一些主键重复
# 1032 主从数据库数据不一致
# 跳过指定error no类型的错误
# slave-skip-errors=1062,1053,1146
# 跳过所有错误
# slave-skip-errors=all
slave-skip-errors=1062
================================
3、修改完配置后重启 master 实例
================================
docker restart mysql-master
================================
4、进入master容器
================================
docker exec -it mysql-master /bin/bash
mysql -uroot -p
show databeses;
================================
5、master 容器实例内创建数据同步用户
================================
创建用户
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
授权
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'slave'@'%';
================================
6、新建从服务器实例 3311
================================
docker run -d -p 3311:3306 --name mysql-slave \
-v /Users/iuu/Developer/docker/mysql/slave/log:/var/log/mysql \
-v /Users/iuu/Developer/docker/mysql/slave/data:/var/lib/mysql \
-v /Users/iuu/Developer/docker/mysql/slave/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=root \
-e LANG="C.UTF-8" \
mysql:latest
================================
7、新建my.cnf
================================
[mysqld]
# 设置server_id 同一局域网中要唯一
server_id=102
# 无需开启二进制日志文件的数据库
# 多个数据库则要重复设置
binlog-ignore-db=mysql
# 打开二进制日志功能.
# 在复制(replication)配置中,作为MASTER主服务器必须打开此项
# 如果你需要从你最后的备份中做基于时间点的恢复,你也同样需要二进制日志.
log-bin=mall-mysql-slave1-bin
# 在一个事务中binlog为了记录SQL状态所持有的cache大小
# 如果你经常使用大的,多声明的事务,你可以增加此值来获取更大的性能.
# 所有从事务来的状态都将被缓冲在binlog缓冲中然后在提交后一次性写入到binlog中
# 如果事务比此值大, 会使用磁盘上的临时文件来替代.
# 此缓冲在每个连接的事务第一次更新状态时被创建
binlog_cache_size=10M
# binlog日志格式
# mysql默认采用statement,建议使用mixed
binlog_format=mixed
# 超过指定天数的binlog将被删除
# 二进制日志过期时间设置为7天(7天 = 7 * 24 * 60 * 60 秒)
binlog_expire_logs_seconds = 604800
# 主从复制跳过错误
# 1062 指一些主键重复
# 1032 主从数据库数据不一致
# 跳过指定error no类型的错误
# slave-skip-errors=1062,1053,1146
# 跳过所有错误
# slave-skip-errors=all
slave-skip-errors=1062
# 配置中继日志
relay_log=mall-mysql-relay-bin
# 启用从库记录复制操作到自己的二进制日志
log_slave_updates = ON
# 限制一个 MySQL 实例的读写操作。
# 0 允许读写操作(默认行为)
# 当设置为 1 时,表示只允许读操作,而写操作会被拒绝
read_only=1
================================
8、修改完配置后重启 slave 实例
================================
docker restart mysql-slave
================================
9、在主数据库中查看主从同步状态
================================
show master status;
================================
10、进入 slave 服务器
================================
docker exec -it mysql-slave /bin/bash
mysql -uroot -p
show databeses;
================================
11、在从数据库中配置主从复制
================================
change master to
master_host='192.168.1.8',
master_user='slave',
master_password='123456',
master_port=3310,
master_log_file='mall-mysql-bin.000002',
master_log_pos=712,
master_connect_retry=30;
================================
12、在从数据库中查看主从同步状态
================================
show slave status \G;
show slave status;
看这两个参数
Slave_IO_Running: No
Slave_SQL_Running: No
================================
13、在从数据库中开启主从同步
================================
start slave;
================================
14、查看从数据库状态发现已经同步
================================
show slave status \G;
================================
15、主从复制测试
================================
主机新建库
create database db01;
主机新建表
use db01;
create table t1 (id int, name varchar(20));
主机插入数据
insert into t1 values(1,'张三');
主机查看数据
select * form t1;
从机查看数据
select * form t1;
================================
MySQL数据误删恢复
DELETE FROM `users` WHERE `id` NOT IN(1,2)
我意识到我闯祸了
19:40-21:55 谷歌百度不知道打开了多少网页 终于补救回来了
我这次是运气好服务器开启了日志
要不然哭都没地哭
数据库要定期备份
一定要开启日志!!!!
总结:
所谓数据库数据恢复可以理解为 让数据库在一段时间内执行的sql语句重新执行(注意是执行到删除之前一分钟)
当我意识到删除之后有点慌,因为数据表引擎是InnoDB 所以我多少的感觉到应该可以恢复(其实我心里一点底都没有,就是感觉),于是赶紧谷歌百度,爬了很多文档之后有一句话感觉很对就照做了
- 不要在写入新数据了,会导致数据污染,更难恢复
之前有了解过误删文件恢复,大概意思就是当想找回误删的文件时千万不要在哪个磁盘中写入新文件,会导致文件覆盖
于是我:
- 关闭网站
- 备份当前存在的数据
- 关闭定时任务(我的定时任务是往数据库写入数据的)
通过搜索得知binlog
这个东西(其实就是日志)
想要恢复数据,首先想到的也是日志:有无所有SQL操作的记录日志,有无开启binlog同步日志。这样才能根据SQL记录重新恢复数据,否则,数据将无法找回。
其次,我们需要查以下MySQL服务器开启了哪些日志,于是首先查看MySQL的配置文件 /etc/my.cnf
,发现开启了errorlog
、slowlog
和binlog
,这时就可以松一口气了,因为只要有binlog,所有数据都将找得回来,slowlog对我们当前的问题来说并没有什么用,errorlog后面我们拿来查找问题原因也许会有用。
万幸我的mysql开启了binlog
日志
show variables like 'log_%';
log_bin 是开启状态
查看当前有哪些binlog文件
show binary logs;
发现有3个binlog文件,我们再来查看当前正在使用的binlog文件是哪个
查看当前使用的binlog文件
show master status;
进入到MySQL的数据存放目录 /www/server/data/,先将这几个binlog文件备份起来,以便防止数据丢失。
进入日志目录中
cd /www/server/data/
备份
# 在用户目录下创建文件夹
mkdir -p ~/mysql-bin-backup
# 拷贝当前目录下所有mysql-bin.开头的文件 到 mysql-bin-backup
cp mysql-bin.* ~/mysql-bin-backup/ -r
将日志转SQL
几个参数了解一下
--start-datetime="开始时间"
--stop-datetime="结束时间"
--database=数据库名称
这段命令的意思是 读取 mysql-bin.000004 开始时间 到 结束时间 指定数据库的操作 转成sql文件
/www/server/mysql/bin/mysqlbinlog --start-datetime="2019-12-07 00:00:00" --stop-datetime="2019-12-13 19:40:00" --database=vip_elemecps_com /root/mysql-bin-backup/mysql-bin.000004 > ~/66666.sql
恢复数据
我是在本地导入的
本地终端链接mysql
创建个数据库
进入数据库
导入sql文件
你会发现你的数据库又回来了哈哈哈哈哈
知识扩展:
mysql是否开启binlog日志:
终端运行:
show variables like 'log_bin';
如果Value 为 OFF 则为开启日志文件
开启方法:
找到my,cnf 中 [mysqld] 添加如下
[mysqld]
# binlog 配置
log-bin = /usr/local/var/mysql/logs/mysql-bin.log
expire-logs-days = 14
max-binlog-size = 500M
server-id = 1
如果没有my.cnf 或者是集成的环境 找到my.ini 中 [mysqld] 添加如下:
[mysqld]
# binlog 配置
log-bin = /usr/local/var/mysql/logs/mysql-bin.log
expire-logs-days = 14
max-binlog-size = 500M
server-id = 1
重启mysql后
show variables like 'log_bin';
value 为 ON 即可