哈特中尉's Blog

不会写代码的司机不是好厨师!

1.解压安装

说明:推荐此方式,可以安装多个版本。

1.1.node12安装

1
2
3
4
5
6
7
cd /usr/local
wget https://registry.npmmirror.com/-/binary/node/latest-v12.x/node-v12.22.9-linux-x64.tar.gz
tar -xvf node-v12.22.9-linux-x64.tar.gz
cd node-v12.22.9-linux-x64/bin
./node -v
ln -s /usr/local/node-v12.22.9-linux-x64/bin/node /usr/bin/node
ln -s /usr/local/node-v12.22.9-linux-x64/bin/npm /usr/bin/npm

1.2.node14安装

1
2
3
4
5
6
https://registry.npmmirror.com/-/binary/node/latest-v14.x/node-v14.21.3-linux-x64.tar.gz
tar -zxvf node-v14.21.3-linux-x64.tar.gz
cd /usr/local/node-v14.21.3-linux-x64/bin
./node -v
ln -s /usr/local/node-v14.21.3-linux-x64/bin/node /usr/bin/node
ln -s /usr/local/node-v14.21.3-linux-x64/bin/npm /usr/bin/npm

1.3.node16安装

1
2
3
4
5
6
https://registry.npmmirror.com/-/binary/node/latest-v16.x/node-v16.20.0-linux-x64.tar.gz
tar -zxvf node-v16.20.0-linux-x64.tar.gz
cd /usr/local/node-v16.20.0-linux-x64/bin
./node -v
ln -s /usr/local/node-v16.20.0-linux-x64/bin/node /usr/bin/node
ln -s /usr/local/node-v16.20.0-linux-x64/bin/npm /usr/bin/npm

2.源码安装

说明:不推荐此方式,耗时、可能编译错误、依赖缺失。

1
2
3
4
5
6
7
8
yum -y install gcc gcc-c++
wget https://nodejs.org/dist/v12.13.1/node-v12.13.1.tar.gz
tar -zxvf node-v12.13.1.tar.gz
cd node-v12.13.1/
./configure
make
make install
node -v

3.使用淘宝镜像

3.1.设置镜像

1
npm config set registry https://registry.npmmirror.com

3.2.检测是否修改成功

1
npm config get registry

特别说明

1
2
1.yum安装方式下载太慢,而且卸载重装会再次下载,费时;故推荐rpm安装。
2.系统版本:centos7.9

关闭SELinux(重要,阿里云等服务器默认关闭,建议先检查)

1
2
3
vi /etc/selinux/config
将SELINUX=enforcing改为SELINUX=disabled
设置后需要重启才能生效,reboot命令。

卸载mariadb/mysql(centos7自带)

1
2
3
4
5
6
rpm -qa | grep mariadb #查找已经安装mariadb
rpm -qa | grep mysql #查找已经安装mysql
yum list installed | grep mysql

yum -y remove mysql-libs.x86_64
rpm -e mariadb-libs-5.5.65-1.el7.x86_64 --nodeps #参数名称必须和上面查出的名称一致

获取安装包

可以本地上传,也可以用国内镜像下载(此处给出网易和清华镜像),比mysql官网快很多。不同版本需修改地址中文件名称。

1
2
3
4
5
6
7
8
https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.32-1.el7.x86_64.rpm-bundle.tar #mysql8官方下载,注意是el7

centos8/rockyLinux8/AnolisOS8
https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.35-1.el8.x86_64.rpm-bundle.tar #注意是el8

#mysql8国内镜像下载(更新不及时)
http://mirrors.163.com/mysql/Downloads/MySQL-8.0/mysql-8.0.28-1.el7.x86_64.rpm-bundle.tar
https://mirrors.tuna.tsinghua.edu.cn/mysql/downloads/MySQL-8.0/mysql-8.0.28-1.el7.x86_64.rpm-bundle.tar

解压安装包(上面直接下载mysql合集,也可以按需分别下载每个rpm包)

1
tar -xvf mysql-8.0.32-1.el7.x86_64.rpm-bundle.tar 

安装rpm包(common、libs、client、server为必须)

centos7(mysql8.0.32)

1
2
3
4
5
6
7
8
rpm -ivh mysql-community-client-8.0.32-1.el7.x86_64.rpm --nodeps --force
rpm -ivh mysql-community-common-8.0.32-1.el7.x86_64.rpm --nodeps --force
rpm -ivh mysql-community-devel-8.0.32-1.el7.x86_64.rpm --nodeps --force
rpm -ivh mysql-community-embedded-compat-8.0.32-1.el7.x86_64.rpm --nodeps --force
rpm -ivh mysql-community-libs-8.0.32-1.el7.x86_64.rpm --nodeps --force
rpm -ivh mysql-community-libs-compat-8.0.32-1.el7.x86_64.rpm --nodeps --force
rpm -ivh mysql-community-server-8.0.32-1.el7.x86_64.rpm --nodeps --force
rpm -ivh mysql-community-test-8.0.32-1.el7.x86_64.rpm --nodeps --force

centos8/rockyLinux8/AnolisOS8(mysql8.0.35)

1
2
3
4
5
6
7
8
rpm -ivh mysql-community-client-8.0.35-1.el8.x86_64.rpm --nodeps --force
rpm -ivh mysql-community-common-8.0.35-1.el8.x86_64.rpm --nodeps --force
rpm -ivh mysql-community-devel-8.0.35-1.el8.x86_64.rpm --nodeps --force
rpm -ivh mysql-community-embedded-compat-8.0.35-1.el8.x86_64.rpm --nodeps --force
rpm -ivh mysql-community-libs-8.0.35-1.el8.x86_64.rpm --nodeps --force
rpm -ivh mysql-community-libs-compat-8.0.35-1.el8.x86_64.rpm --nodeps --force
rpm -ivh mysql-community-server-8.0.35-1.el8.x86_64.rpm --nodeps --force
rpm -ivh mysql-community-test-8.0.35-1.el8.x86_64.rpm --nodeps --force

卸载rpm包(如果重新安装可参考)

1
2
3
4
5
6
7
8
rpm -e mysql-community-embedded-compat-8.0.32-1.el7.x86_64 --nodeps
rpm -e mysql-community-test-8.0.32-1.el7.x86_64 --nodeps
rpm -e mysql-community-client-8.0.32-1.el7.x86_64 --nodeps
rpm -e mysql-community-devel-8.0.32-1.el7.x86_64 --nodeps
rpm -e mysql-community-libs-8.0.32-1.el7.x86_64 --nodeps
rpm -e mysql-community-server-8.0.32-1.el7.x86_64 --nodeps
rpm -e mysql-community-common-8.0.32-1.el7.x86_64 --nodeps
rpm -e mysql-community-libs-compat-8.0.32-1.el7.x86_64 --nodeps
安装依赖(否则下一步初始化失败)
1
2
yum -y install libaio
yum -y install numactl
初始化数据库
1
mysqld --initialize --console --lower-case-table-names=1

特别注意:lower-case-table-names默认是0,此时activiti的表名称全部是大写,会导致数据库存在两张表act_evt_log和ACT_EVT_LOG,程序报错。
详细解释:https://www.cnblogs.com/mydriverc/p/8296647.html

目录授权,否则启动失败
1
chown -R mysql:mysql /var/lib/mysql/

说明:给操作系统的mysql账号授权/var/lib/mysql/目录,否则mysqld服务无法启动。
默认/etc/my.cnf中的datadir=/var/lib/mysql,代表mysql数据存放路径。

更改mysql的数据文件路径(可选)

1、复制/var/lib/mysql/var/lib/mysql_new
2、更改/etc/my.cnfdatadir=/var/lib/mysql_new
3、chown -R mysql:mysql /var/lib/mysql_new/

修改/etc/my.cnf中lower-case-table-names配置(可选)

1.如果初始化数据的时候没有指定lower-case-table-names参数的值,即默认0;则不需要此配置。
2.如果初始化指定了参数,但是my.cnf中没有配置,则启动失败。查看/var/log/mysqld.log会发现此参数初始化值和配置值不同导致。
Different lower_case_table_names settings for server ('0') and data dictionary ('1').

1
2
[mysqld]
lower-case-table-names=1
启动服务(启动失败请看上面步骤)
1
2
3
4
5
6
7
启动服务
systemctl start mysqld
查看状态,启动失败查看原因
systemctl status mysqld
开机自启动mysql
systemctl enable mysqld
systemctl daemon-reload

如果mysql服务可以正常启动,恭喜你,mysql安装完成。

查看root临时密码
1
grep 'temporary password' /var/log/mysqld.log
1
2
[Note] [MY-010454] [Server] A temporary password is generated for root@localhost: 3yMoxa?*nMrl
自动成临时密码:3yMoxa?*nMrl
登录mysql(回车后输入上面的临时密码即可登录mysql)

温馨tip:可以将上面查询的密码复制出来,执行命令后复制到剪切板,然后点击鼠标右键直接粘贴,避免输入错误。

1
2
3
mysql -uroot -p
或者
mysql_secure_installation
修改root密码
1
2
3
4
5
6
mysql8
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';
flush privileges;
mysql5.7
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的密码';
flush privileges;

注意:mysql8新的密码策略,很多mysql客户端工具不支持,所以用原来的密码策略。切记!

添加远程登录用户(例如:develop)

1
2
3
create user 'develop'@'%' identified with mysql_native_password by '你的密码';
grant all privileges on *.* to 'develop'@'%' with grant option;
flush privileges;

说明:创建一个develop用户,可以在任何客户端登录(root只能在本机),拥有所有数据库权限(并且可以授给其他mysql用户)。

添加项目用户(例如:crm,数据库crm,用户名crm)
1
2
3
4
create database crm; #创建crm数据库
CREATE USER 'crm'@'%' IDENTIFIED WITH mysql_native_password BY 'crm2018' PASSWORD EXPIRE NEVER;#创建用户并且密码永不过期
GRANT ALL PRIVILEGES ON crm.* TO 'crm'@'%' with grant option; #授权数据库所有操作给用户
FLUSH PRIVILEGES;

my.cnf参考

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[client]
port=3417
default-character-set=utf8mb4

[mysqld]
default-authentication-plugin=mysql_native_password
port=3417
max_connections=1000
character-set-server=utf8mb4
lower-case-table-names=1 #表名大小写不敏感
default-storage-engine=INNODB

datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' #解决group by报错
关闭防火墙

注意:远程访问mysql,关闭防火墙配置,否则无法访问哟。

1
2
systemctl stop firewalld.service
systemctl disable firewalld.service

yum安装方式

1
2
3
4
5
yum list installed | grep mysql   #查看已安装的mysql
yum -y remove mysql-libs.x86_64 #卸载已经安装
rpm -Uvh https://repo.mysql.com/mysql80-community-release-el7-1.noarch.rpm #安装mysql源
yum --enablerepo=mysql80-community install -y mysql-community-server
yum install -y mysql-community-client

安装完成后,初始化等操作和rpm类似。

彻底卸载mysql

1
2
3
4
5
rpm -qa|grep mariadb
rpm -qa|grep mysql
find / -name mysql

rm -rf /var/lib/mysql

查看log文件位置

cat /etc/my.cnf

1
log-error=/var/log/mysqld.log

其他参考资料:
https://blog.csdn.net/weixin_42266606/article/details/80879571
https://www.cnblogs.com/kevingrace/p/10482469.html

安装环境说明
解压安装包
  • 解压路径:D:\develop\software
  • 解压后mysql根目录:D:\develop\software\mysql-8.0.13-winx64

原则: 安装目录不能有空格、不能有中文

配置文件
  • my.ini文件拷贝到mysql根目录,文件路径为:D:\develop\software\mysql-8.0.13-winx64\my.ini

  • my.ini内容如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    [mysql]
    # 设置mysql客户端默认字符集
    default-character-set=utf8mb4
    [mysqld]
    # 设置3306端口
    port=3306
    # 设置mysql的安装目录
    basedir=D:\\software\\mysql-8.0.13-winx64
    # 设置 mysql数据库的数据的存放目录,MySQL 8+ 不需要以下配置,系统自己生成即可,否则有可能报错
    # datadir=D:\\software\\mysql-8.0.13-winx64\\data
    # 允许最大连接数
    max_connections=20
    # 服务端使用的字符集默认为8比特编码的latin1字符集
    character-set-server=utf8mb4
    # 创建新表时将使用的默认存储引擎
    default-storage-engine=INNODB

    注意:不需要设置data目录,自动生成,否则报错!双斜杠!!!!!!

  • mysql5.7配置文件参考

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    [mysql]
    # 设置mysql客户端默认字符集
    default-character-set=utf8mb4
    [mysqld]
    # 设置3306端口
    port=3306
    # 设置mysql的安装目录
    basedir=D:\\software\\mysql-5.7.30-winx64
    # 设置 mysql数据库的数据的存放目录,MySQL 8+ 不需要以下配置,系统自己生成即可,否则有可能报错
    datadir=D:\\software\\mysql-5.7.30-winx64\\data
    # 允许最大连接数
    max_connections=20000
    # 服务端使用的字符集默认为8比特编码的latin1字符集
    character-set-server=utf8mb4
    # 创建新表时将使用的默认存储引擎
    default-storage-engine=INNODB
    初始化mysql
  • 进入D:\develop\software\mysql-8.0.13-winx64\bin

  • 执行 mysqld --initialize --console

注意:管理员权限运行cmd程序,否则可能报错

[Note] [MY-010454] [Server] A temporary password is generated for root@localhost: 3yMoxa?*nMrl
自动成临时密码:【3yMoxa?*nMrl】

E:\mysql-8.0.13-winx64\bin\mysqld.exe (mysqld 8.0.13) initializing of server has completed
初始化完成提示。

注册mysql服务
1
2
3
mysqld install  
或者(指定服务名称,一台机器同时安装两个mysql版本时,区分mysql5.7和mysql8)
mysqld install mysql8
启动mysql
1
net start mysql
登录mysql
1
mysql -uroot -p

注意:输入上面生成的临时密码 【3yMoxa?*nMrl】

修改密码并且修改密码策略
1
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';

注意:mysql8新的密码策略,很多mysql客户端工具不支持,所以用原来的密码策略。

完成。

下载和安装

1
2
3
4
wget http://download.redis.io/releases/redis-5.0.0.tar.gz
tar -zxvf redis-5.0.0.tar.gz
cd redis-5.0.0
make && make install

注册服务(推荐)

redis-5.0.0/utils

1
./install_server.sh  # 一路Enter即可

开启远程访问

  • 注释bind
  • protected-mode改为no

vi /etc/redis/6379.conf

1
2
#bind 127.0.0.1
protected-mode no

启动服务

1
2
3
4
5
6
7
service redis_6379 start    #启动
service redis_6379 stop #停止
service redis_6379 restart #重启

# 开机自启动
systemctl enable redis_6379
systemctl daemon-reload

【到此完成安装和服务注册。以下内容仅供参考。】

检查Redis是否正常(可选,一般不需要)

1
2
yum -y install tcl
make test

可执行文件拷贝到$PATH目录下(可选,默认自动已经拷贝)

1
2
3
cd src
cp redis-server /usr/local/bin/
cp redis-cli /usr/local/bin/

启动Redis-server【可选,一般服务方式启动】

1
2
3
redis-server        # 运行,可以看控制台
redis-server & # 后台运行
redis-server redis.conf #如果要启动多个redis实例,可以指定配置文件

查看Redis-server启动情况

1
2
ps -ef | grep redis
netstat -nlt|grep 6379

停止redis

1
2
ps -ef | grep redis
kill -9 1111

启动Redis-client

1
redis-cli

密码保护

客户端连接必须输入密码abc123才可连接成功!
vi /etc/redis/6379.conf

1
requirepass abc123

相关默认路径

1
2
3
4
5
6
7
8
9
Selected config:
Port : 6379
Config file : /etc/redis/6379.conf
Log file : /var/log/redis_6379.log
Data dir : /var/lib/redis/6379
Executable : /usr/local/bin/redis-server
Cli Executable : /usr/local/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379

1.搜索redis镜像
1
docker search redis
2.拉取redis
1
docker pull  redis
3.启动镜像
1
docker run -p 6379:6379 -d redis:latest redis-server

1.播放音效

  • 添加AVFoundation框架依赖
  • #import <AVFoundation/AVFoundation.h>
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    //1.获得音效文件的全路径

    NSURL *url=[[NSBundle mainBundle]URLForResource:@"buyao.wav" withExtension:nil];

    //2.加载音效文件,创建音效ID(SoundID,一个ID对应一个音效文件)
    SystemSoundID soundID=0;
    AudioServicesCreateSystemSoundID((__bridge CFURLRef)url, &soundID);

    //把需要销毁的音效文件的ID传递给它既可销毁
    //AudioServicesDisposeSystemSoundID(soundID);

    //3.播放音效文件
    //下面的两个函数都可以用来播放音效文件,第一个函数伴随有震动效果
    AudioServicesPlayAlertSound(soundID);
    //AudioServicesPlaySystemSound(<#SystemSoundID inSystemSoundID#>)

    1.播放音频

  • 添加AVFoundation框架依赖
  • #import <AVFoundation/AVFoundation.h>
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //1.音频文件的url路径
    NSURL *url=[[NSBundle mainBundle]URLForResource:@"235319.mp3" withExtension:Nil];

    //2.创建播放器(注意:一个AVAudioPlayer只能播放一个url)
    AVAudioPlayer *audioPlayer=[[AVAudioPlayer alloc]initWithContentsOfURL:url error:Nil];

    //3.缓冲
    [audioPlayer prepareToPlay];

    //4.播放
    [audioPlayer play];

1.下载历史版本xcode

https://developer.apple.com/download/more

2.安装两个版本xcode

http://www.jianshu.com/p/c266b4623900

1.添加点击事件

  • storyboard添加
    1
    2
    3
    -(void) onButtonClick:(id)sender{
    [sender setHighlighted:YES];
    }
  • UIButton
    1
    2
    3
    4
    5
    [button addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside];

    -(void)buttonClick:(UIButton *) button{

    }
  • UIView
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    UITapGestureRecognizer *tapGesturRecognizer=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(onItemClick:)];
    [view addGestureRecognizer:tapGesturRecognizer];
    view.userInteractionEnabled = YES; // 可以理解为设置label可被点击

    -(void)onItemClick:(id)sender{
    NSInteger tag = 0;
    if([sender isKindOfClass:[UITapGestureRecognizer class]]){
    tag= ((UITapGestureRecognizer *) sender).view.tag;
    }else if([sender isKindOfClass:[UIView class]]){
    tag= ((UIView *) sender).tag;
    }
    注意:一个UITapGestureRecognizer只能对应一个View。

2.UIViewControl的打开和关闭(A->B)

  • NavigationController
    在A中打开B
    [self.navigationController pushViewController:dest animated:YES];
    在B中关闭自己(实际是关闭栈顶)
    self.navigationController popViewControllerAnimated:<#(BOOL)#>
  • UIViewControl
    在A中打开B
    presentViewController:dest animated:YES completion:^{
    1
    2
      NSLog(@"ok");
    }];
    在B中关闭自己
    [self dismissViewControllerAnimated:YES completion:nil];

参考地址:http://blog.csdn.net/u010850094/article/details/52274438

3.自定义cell上的button点击事件
  • 1.在cell里,.h写一个Block.
    1
    @property (nonatomic,copy)void(^agreeBlock)();
    1. 在cell里,.m写一个点点击事件.
      1
      2
      3
      4
      5
      - (IBAction)agreeClick:(id)sender {
      if (self.agreeBlock) {
      self.agreeBlock();
      }
      }
  • 3.在tableView中
    1
    2
    3
    4
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    cell.telephoneBlock=^(){
    NSLog(@"phonenumber is ======%@",shopmodel.phone);
    };

查看linux内核

uname -r
4.12.1-1.el7.elrepo.x86_64

查看centos版本

lsb_release -a

command not found 解决方法:
yum install redhat-lsb -y

下载安装包(清华大学开源软件镜像站)

1
2
3
4
5
6
7
wget https://mirrors.tuna.tsinghua.edu.cn/gnu/glibc/glibc-2.20.tar.gz
tar -zxvf glibc-2.20.tar.gz
mkdir glibcbuild
cd glibcbuild
../glibc-2.20/configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
make
make install

成功则提示:Your new glibc installation seems to be ok.

2.26安装失败

2.26版本 执行configure的时候出现如下错误,查阅资料好像需要先升级gcc,再升级glibc。
保险起见,没有升级gcc,就用2.20版本了。

1
2
3
4
5
6
7
checking if gcc -B/usr/bin/ is sufficient to build libc... no
checking for nm... nm
checking for python3... no
checking for python... python
configure: error:
*** These critical programs are missing or too old: compiler
*** Check the INSTALL file for required versions.

tomcat准备

本地成功启动两个tomcat
tomcatA 8080 webapps/cms/index.html文件的内容tomcatA
tomcatB 8081 webapps/cms/index.html文件的内容tomcatA

tomcatA http://localhost:8080/cms/index.html
tomcatB http://localhost:8081/cms/index.html

配置nginx

nginx.conf 配置内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
http{
upstream cmsCluster{
server localhost:8080 weight=1;
server localhost:8081 weight=1;
}
server{
listen 8090;
server_name localhost;
location /{
proxy_pass http://cmsCluster;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location = /50x.html {
root html;
}
}
}

nginx http://localhost:8090/cms/index.html

不停刷新页面,看内容变化。负载均衡完成。