连接远程服务器

一些查看命令

看内存
free -h

看已挂载磁盘空间
df -h

看当前目录的磁盘使用情况
du -sh .

复制到远程 # 带-r是文件夹, 不带是文件
scp -r [本地path/文件] [用户名]@[ip地址]:[远程path/文件]

rsync方法 # 带-r是文件夹, 不带是文件
rsync -r [本地path/文件] [用户名]@[ip地址]:[远程path/文件]

关闭ssh连接
Ctrl+d

设置这个避免远程连接不用,等一会就断连了。

# /etc/ssh/ssh_config 或 ~/.ssh/config
 24 Host *
 25 ServerAliveInterval 60

普通连接远程服务器

# 连接
ssh [用户名]@[远程ip]

# 一些配置可设可不设
# ~/.ssh/config
Host remote-server
	HostName 10.184.17.27
	User liukun
	IdentityFile ~/.ssh/id_rsa_10.184.17.27
	PubkeyAuthentication yes
	PasswordAuthentication no

iterm2连远程服务器

我是想用key连接,不想用用户名密码,所以

  1. 创建key, 可能需要改下名字
    ssh-keygen

  2. 把公钥(带pub的)传到远程server
    ssh-copy-id -i [path/公钥的名字.pub] [用户名]@[远程ip]

  3. 写一个登录脚本,一般就在.ssh

# ~/.ssh/expect的脚本.sh
#!/bin/bash
spawn ssh -i [path/私钥的名字] [用户名]@[远程ip]
interact
  1. 在iterm2的setting的profiles下创建一个新的profile,主要是改名字,以及设置command -> 选择command,然后路径设置:
    expect ~/.ssh/expect的脚本.sh

  2. 在iterm2的profiles里面找到4设置的名字,点击连接。

创建隔离环境

因为没有root权限,所以安装要安装在~路径下,和其他用户分隔开。

其实一些软件自带了隔离环境的tool,比如python可以使用venv,node.js用nvm,前端用npm

统一的方法:将软件所在的路径加入到 PATH 环境变量
执行方式:
在 .bashrc 配置文件中把 ~/.local/bin/ 加入到 PATH 环境变量中,且优先于原本 PATH 中的系统路径:

export PATH="$HOME/.local/bin/:$PATH"

ps:查看本机shell
echo $SHELL 或者 echo $0

无root安装mysql

就要自己在官网下载。
注意格式选Linux - Generic。下载链接在download按钮右键复制
❗️ 这里我刚开始下载了mysql-8版本,后面提示说太高,最后是降到mysql-5版本成功的。
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.44-linux-glibc2.28-x86_64.tar.xz

解压。刚开始用tar -zxvf光报错,结果我是tar.xz不是tar.gz格式
tar -xvf mysql-5.7.44-linux-glibc2.28-x86_64.tar.xz

移到~/.local/bin/并改名。没有bin就mkdir
mv mysql-5.7.44-linux-glibc2.28-x86_64 ~/.local/bin/mysql-5.7.44

然后进mysql-5.7.44创建my.cnf并编辑

[client]
port=3306
socket=$HOME/.local/bin/mysql-5.7.44/mysql.sock

[mysqld]
port=3306
basedir=$HOME/.local/bin/mysql-5.7.44
datadir=$HOME/.local/bin/mysql-5.7.44/data
pid-file=$HOME/.local/bin/mysql-5.7.44/mysql.pid
socket=$HOME/.local/bin/mysql-5.7.44/mysql.sock
log_error=$HOME/.local/bin/mysql-5.7.44/error.log
server-id=100
# 大小写不敏感
# lower_case_table_names=1

运行☟,初始化mysql
bin/mysqld --defaults-file=$HOME/.local/bin/mysql-5.7.44/my.cnf --initialize --user=你的username
然后就会报错
bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
然后在这里下载
wget https://pagure.io/libaio/archive/libaio-0.3.113/libaio-libaio-0.3.113.tar.gz
解压
tar -zxvf libaio-libaio-0.3.113.tar.gz
这里安装,又要绕开root

make
# 这里要指定安装路径,最后这个libaio是自己定义的文件夹
make install prefix=$HOME/.local/bin/libaio

然后在lib64里添加软链,如果没有lib64就mkdir。我也不知道放在lib里还是lib64里,就都放了。

cd $HOME/.local/bin/mysql-xxx/lib(or lib64)
ln -snf $HOME/.local/bin/libaio/lib/libaio.so.1.0.2 libaio.so.1

我这里是libaio.so.1.0.2,需要看自己的libaio包里是什么。
这里的逻辑是,将libaio安装到一个地方比如$HOME/.local/bin里,然后在mysql的lib里,将libaio.so.1软链到安装后的libaio文件夹里的libaio.so.1.0.2上。之前看的教程,这里步骤说的不是很清楚。

然后增添环境变量

# ~/.bashrc
export LD_LIBRARY_PATH=$HOME/.local/bin/libaio/lib
export PATH=$PATH:$HOME.local/bin/mysql-5.7.44/bin

这里的意思是,将mysql的bin加入环境变量path,并且将这个libaio的执行路径(libaio.so.1.0.2的文件夹)加入这个LD_LIBRARY_PATH。
然后source 它。

然后在mysql里再运行。
💡 注意这里的--user=mysql我开始以为是自己的用户名,其实是

mysql 用户是专门用于运行 MySQL 服务器的用户。
在安装 MySQL 时,通常会自动创建一个名为 mysql 的用户,并且 MySQL 服务器会以该用户的身份运行。

bin/mysqld --defaults-file=$HOME/.local/bin/mysql-5.7.44/my.cnf --initialize --user=mysql
如果啥都没返回且没报错就成功了。

启动mysql,&意思是后台运行
bin/mysqld_safe --defaults-file=$HOME/.local/bin/mysql-5.7.44/my.cnf --user=mysql &

结果报了一个错,找不到errmsg.sys的路径,那么给my.cnf里添加

[mysqld]
...
lc-messages-dir=/home/liukun/.local/bin/mysql-5.7.44/share/english/

这个写到文件夹就好了,不用写文件。

然后再启动。如果进程没退出,且另开一个终端,在mysql/文件夹里运行netstat -tln | grep 3306能看到监听内容就成功了。

之后登录。gpt说root初始没有密码,其实不对,还是在error.log里有初始密码,用:
cat error.log | grep root@localhost
查看,登录。
mysql -u root -p -S /home/project/tools/mysql/mysql.sock
注意咱这种方法,都要手动指定sock目录-S [path]

登录之后修改密码:

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123456');	--设置登录密码为123456
flush privileges;

# 可以顺便创建一个新用户,并给权限
CREATE USER 'username'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'username'@'%';

还需要开启远程访问:

# 注意这里仍然是登录mysql状态

mysql> use mysql

# 这里查看用户认证信息,可以看到HOST列全是localhost
mysql> select User,authentication_string,Host from user;

# 设置允许其他主机访问,by后面那里是密码
# % 表示所有主机,也可以用具体ip表示
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456';	 
flush privileges;

至此好了。可以再select查一次就会发现多了一行host列为%的

round了一圈还是要sudo权限比较好TT