0%

Ubuntu下安装MySQL

mysql-server :mysql服务器

mysql-client :mysql命令行工具

mysql workbench :mysqlGUI管理工具

安装mysql-server

安装

安装命令:

1
sudo apt-get install mysql-server

安装过程中会有一个输入用户名和密码的步骤。记住用户名密码后面登录的时候会用到。

安装完成后可以使用:mysql --version查看安装的版本

启动停止

查看状态:

1
sudo service mysql status

启动:

1
sudo service mysql start

停止:

1
sudo service mysql stop

查看网络端口:

1
sudo netstat -lnpt |grep mysql

如下图:mysql在3306端口启动(默认端口就是3306)

安装mysql-client

安装

1
sudo apt-get install mysql-client

安装成功后就可以在终端管理数据库

1
mysql -u user -p

-u后面跟的是用户名(默认root)

-p密码 (安装mysql是输入的密码)

mysqlGUI管理工具

这里推荐两个

Navicat: 收费 只提供官网地址,要使用破解版自行搜索

中国官网

官网


MySQL Workbench:官方的GUI免费

下载地址:

MySQL Workbench

安装过程中的遇到的问题

远程连接权限问题:

安装完mysql遇到了本地能连接到mysql。但是数据库管理工具连接到数据库,提示权限问题。

问题分析:

  • 检查网络问题,服务器网络是否联通
  • mysql状态是否启动
  • 防火墙是否禁用可3306端口
  • 3306端口绑定只能本地访问
  • mysql用户访问权限

访问权限问题

我这里不能访问的原因是因为mysql的访问权限问题和3306端口和localhost绑定。

修改访问权限

mysql的用户访问权限都在数据库mysql的user表里面。
如下图root用户的Host默认为localhost,所以root用户只能通过localhost访问数据库,简单的办法是直接修改localhost为%,意思是任何ip都可以连接数据库。

1
2
3
4
5
6
mysql> use mysql; 
mysql> select host,user form user;
mysql> update user set host = '%' where user ='root';
mysql> select host,user from user;
mysql> flush privileges;
mysql> quit;

还有一种就是新增一个用户用来运行远程连接

在终端中连接到mysql

mysql -u user -ppasswor

添加用户授权方法

1
mysql>GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;

如图上面的root用户已经修改,amai用户为新增用户。

修改mysql配置文件

配置文件地址:

配置文件的路径根据版本可能略有差异,我这里的配置文件是
/etc/mysql/mysql.conf.d/mysqld.cnf

注释掉配置文件中bind-address = 127.0.0.1

保存后重启下mysql。

子元素垂直、左右居中的问题

转载自何来笑红尘的博客

直接开始,父级元素默认display:block;

html部分

1
2
3
<div class="c-middle-box">
<div class="c-middle"></div>
</div>

css部分

1、使用CSS3中新增属性tranform相关知识实现(推荐使用)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
.c-middle-box{
position: absolute;
width: 100%;
height: 100%;
background: #63eefe;
}
.c-middle{
position: relative;/* position一定要设置,但不可设置为static*/
width: auto;
height: auto;
max-width: 100%;
max-height: 100%;
left: 50%;/* left值固定*/
top: 50%;/* top值固定*/
transform: translate(-50%,-50%);/* translate值固定*/
-webkit-transform: translate(-50%,-50%);
-moz-transform: translate(-50%,-50%);
-ms-transform: translate(-50%,-50%);
-o-transform: translate(-50%,-50%);
}

注:父级绝对定位,是为了更好的展示示例。在实际项目中可根据实际情况而定。(在谷歌浏览器中如果父级元素没有高度,会导致此方法无效;)

2、 绝对定位方式来上下左右居中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    position: absolute;
width: 100%;
height: 100%;
background: #63eefe;
}
.c-middle{
position: absolute;/*值固定*/
left: 0;/*值固定*/
right: 0;/*值固定*/
bottom: 0;/*值固定*/
top: 0;/*值固定*/
width:50%;
height:50%;
margin: auto;/*值固定*/
}

3、父级元素display:table-cell

1
2
3
4
5
6
7
8
9
10
11
12
.c-middle-box{
display: table-cell;/*值固定*/
width: 618px;
height: 330px;
background: #63eefe;
text-align: center;
vertical-align: middle;/*值固定*/
}
.c-middle{
display: block;
margin: 0 auto;
}

注:如果子元素为inline-block,那么c-middle内样式可不写;

4、子元素inline-block方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
.c-middle-box{
display: block;
width: 618px;
height: 330px;
line-height:330px;/* line-height一定要等于自身的高度 */
background: #63eefe;
text-align: center;
vertical-align: middle;
font-size: 0;
}
.c-middle{
display: inline-block;
font-size: 16px;
line-height:1;/* 为避免继承父级元素line-height。此处可根据实际情况重新设置line-height */
}

父级元素设置font-size:0;是因为display:inline-block;有默认的边距,这样做是为了消除边距。子元素可根据实际情况重新设置font-size:;如果在一些浏览器中还存在边距。可以试试在父级样式加上letter-spacing: 0

转载自何来笑红尘的博客

ffmpeg合并多路rtmp流

最近在看有关连麦的相关技术,其中有一种实现方式是将两路的视频流合并成一段。最简单的方法是使用ffmpeg的overlay参数,将一个视频流覆盖到另一个上面。

语法

overlay[=x[:y]]

参数可选,默认是0。距离画面左上角的x、y的距离。

举例

将视频流1rtmp://inputstream1和视频流2rtmp://inputstream2合并后输出视频流rtmp://outputstream
注意这里是将视频流2覆盖在视频流1上。所以保证视频流2的大小不要比视频流1大。或者在使用ffmpeg合并的时候指定流画面的大小。

添加视频在左上角:

1
ffmpeg  -i "rtmp://inputstream1" -i "rtmp://inputstream2" -filter_complex overlay -f flv "rtmp://outputstream"

添加视频在右上角:

1
ffmpeg  -i "rtmp://inputstream1" -i "rtmp://inputstream2" -filter_complex overlay=W-w -f flv "rtmp://outputstream"

添加视频在左下角:

1
ffmpeg  -i "rtmp://inputstream1" -i "rtmp://inputstream2" -filter_complex overlay=0:H-h -f flv "rtmp://outputstream"

添加视频在右下角:

1
ffmpeg  -i "rtmp://inputstream1" -i "rtmp://inputstream2" -filter_complex overlay=W-w:H-h -f flv "rtmp://outputstream"

距离画面左上角x、y:

1
ffmpeg  -i "rtmp://inputstream1" -i "rtmp://inputstream2" -filter_complex overlay=x:y -f flv "rtmp://outputstream"

如图蓝色代表视频流1,红色代表视频流2,这里的x、y代表视频流2的左上角距离视频流1的左上角的距离。

更多的内容请查看ffmpeg的官方文档

在Ubuntu上安装gitlab的时候,在安装过程中遇到了/usr/lib/x86_64-linux-gnu/libstdc++.so.6: version 'GLIBCXX_3.4.20' not found
问题。

终端运行strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
看到下面的输出,发现没有GLIBCXX_3.4.20。产生这个问题的原因是GCC版本低需要更新:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_DEBUG_MESSAGE_LENGTH

解决这个问题,终端执行下面的命令:

sudo apt-get install libstdc++6

然后在执行一遍就会发现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$ strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21

这时GLIBCXX_3.4.20GLIBCXX_3.4.21就出现了。

这里我通过这方法就成功解决了这个问题。如果还是没有解决可以参考这两篇文章中的方法。

http://askubuntu.com/questions/575505/glibcxx-3-4-20-not-found-how-to-fix-this-error

http://stackoverflow.com/questions/16605623/where-can-i-get-a-copy-of-the-file-libstdc-so-6-0-15

解决在Ubuntu上配置swift出现GLIBCXX_3.4.20 not found问题

iOS中关于Other Linker Flags

iOS开发中,经常会用到一些第三方的静态库。导入编译的时候可能会遇到duplicate symbol错误。有的时候编译不报错运行的时候会报selector not recognized的错误。这时候我们需要在build setting中设置other linker flags加入参数-ObjC或者-all_load,就可以解决。那么,关于出现这些错误的原因?与other linker flags到底发挥的什么作用?

错误分析

duplicate symbol错误

原因:

  • 误将.m文件引入为头文件
  • 同一个工程中含有同名的文件。(同样的类名)
  • 引入的第三方框架包涵了与本地同名的文件
  • 第三方框架中包含相同的文件

解决:

首先排除第一种原因。然后可以根据错误的提示信息查看是哪个文件重复。

如图在错误提示中很清楚的知道是工程中的AudioPlayer文件与AmaiMedia.o中的冲突。这是根据你的项目中的情况进行修改。是修改静态库中的方便还是修改项目中的方便。一般情况是修改项目中的文件。(造成这种问题的原因是没有遵循苹果命名规范,没有加前缀。导致AudioPlayer这个类名冲突。以后命名的是要加上前缀后面跟上类名例如:ZCWAudioPlayer)

selector not recognized错误

原因:

  • 方法不存在
  • 内存管理不当
  • 静态库使用问题

解决:

第一种问题:检查拼写错误,检查该方法在当前的iOS版本是否可用

第二种问题:你的App试图引用一个已经被释放的对象.可以使用Zombies检查下问题原因。检查是否有内存越界的问题,可以开启内存防护,日志等选项,再添加异常断点。
第三种问题:静态库分类方法加载不当。在Other Linker Flags中设置-ObjC,-all_load,-force_load

连接器

一个程序从简单易读的代码到可执行文件往往要经历以下步骤:

源代码 > 预处理器 > 编译器 > 汇编器 > 机器码 > 链接器 > 可执行文件

源文件经过一系列处理以后,会生成对应的.obj文件,然后一个项目必然会有许多.obj文件,并且这些文件之间会有各种各样的联系,例如函数调用。链接器做的事就是把这些目标文件和所用的一些库链接在一起形成一个完整的可执行文件。

闪退原因

Objective-C的链接器并不会为每个方法建立符号表,而是仅仅为类建立了符号表。这样的话,如果静态库中定义了已存在的一个类的分类,链接器就会以为这个类已经存在,不会把分类和核心类的代码合起来。这样的话,在最后的可执行文件中,就会缺少分类里的代码,这样函数调用就失败了。

解决办法

在Other Linker Flags里面加上所需的参数。所需要的参数包括-ObjC、-all_load、-force_load

-ObjC:加了这个参数后,链接器就会把静态库中所有的Objective-C类和分类都加载到最后的可执行文件中,虽然这样可能会因为加载了很多不必要的文件而导致可执行文件变大,但是这个参数很好地解决了我们所遇到的问题。但是并不是所有问题都能解决,当静态库中只有分类而没有类的时候,-ObjC参数就会失效了。这时候,就需要使用-all_load或者-force_load了。

-all_load:会让链接器把所有找到的目标文件都加载到可执行文件中,但是千万不要随便使用这个参数!假如你使用了不止一个静态库文件,然后又使用了这个参数,那么你很有可能会遇到ld: duplicate symbol错误,因为不同的库文件里面可能会有相同的目标文件,所以建议在遇到-ObjC失效的情况下使用-force_load参数

-force_load:所做的事情跟-all_load其实是一样的,但是-force_load需要指定要进行全部加载的库文件的路径,这样的话,你就只是完全加载了一个库文件,不影响其余库文件的按需加载

Omnibus GitLab 参数配置

GitLab 和 GitLab CI 的相关参数配置都存在 /etc/gitlab/gitlab.rb文件里。查看所有可用的参数 gitlab.rb.template. 自GitLab 7.6开始的新安装包, 已经默认将所有的参数写入到 /etc/gitlab/gitlab.rb 文件中.

配置域名 Configuring the external URL for GitLab

为使用户可以正确的获取到GitLab上显示的当前仓库的clone地址, GitLab需要你设置好哪个url才是用户可以访问到GitLab, 比如 http://gitlab.example.com。你需要编辑下面这个文件/etc/gitlab/gitlab.rb:

1
external_url "http://gitlab.example.com" #替换为你自己的地址或者ip

然后运行sudo gitlab-ctl reconfigure是配置生效。

Gitlab日常维护指南

常用维护命令

查看各服务的状态

运行sudo gitlab-ctl status,将显示出各个服务的状态:

1
2
3
4
5
6
7
8
root@ubuntu:/home/abai# gitlab-ctl status
run: gitlab-workhorse: (pid 695) 85s; run: log: (pid 694) 85s
run: logrotate: (pid 691) 85s; run: log: (pid 689) 85s
run: nginx: (pid 692) 85s; run: log: (pid 690) 85s
run: postgresql: (pid 698) 85s; run: log: (pid 697) 85s
run: redis: (pid 688) 85s; run: log: (pid 687) 85s
run: sidekiq: (pid 686) 85s; run: log: (pid 685) 85s
run: unicorn: (pid 696) 85s; run: log: (pid 693) 85s

启动停止服务

omnibus-gitlab安装配置完成后,服务器会生成一个Runit的服务目录, (runsvdir)通过/etc/inittab/etc/init/gitlab-runsvdir.conf 配置文件引导运行GitLab服务。我们不建议用runsvdir直接控制服务的运行状态, Gitlab提供了gitlab-ctl这个前端命令代替runsvdir

启动Gitlab所以组件

sudo gitlab-ctl start

停止Gitlab所以组件

sudo gitlab-ctl stop

重启Gitlab所以组件

sudo gitlab-ctl restart

注意 单核的服务器重启Unicorn和Sidekiq会多需要点时间。 在Unicorn重启完成之前GitLab会报502错误, 如一直是502错误就需要查看logs来定位错误原因了。

gitlab-ctl也可以单独对Gitlab的组件进行重启、停止和启动的操作:

sudo gitlab-ctl restart sidekiq

Unicorn 支持zero-downtime(零停机)重载,可以用如下命令触发:

sudo gitlab-ctl hup unicorn #使unicorn进程HUP,即挂起unicorn

唤醒Rake tasks

可以用gitlab-rake唤醒Gitlab Rake task,如:

sudo gitlab-rake gitlab:check #运行gitlab体检任务

如果你当前是’git’用户,可以不用’sudo’。

与传统方式安装的Gitlab相反, Omnibus唤醒rake task不需要切换用户或使用RAILS_ENV环境变量, 可以放心的用gitlab-rake这个封装脚本。

启动Rails控制台会话

如需要访问GitLab的Rails控制台,只需要如下所示的一个命令即可。 但是一定要谨慎,在该控制台下很容易无意中修改、污染, 甚至销毁数据。

1
2
# 启动GitLab Rails控制台
sudo gitlab-rails console

在控制台修改的内容,需要运行gitlab-ctl reconfigure后才会生效。

有关数据库、容器注册垃圾回收相关内容目前还没用到。可以直接查看相关文档。

https://doc.gitlab.cc/omnibus/maintenance/README.html#maintenance-commands

Gitlab安装与配置

安装

安装配置依赖项

如想使用Postfix来发送邮件,在安装期间请选择’Internet Site’. 您也可以用sendmai或者 配置SMTP服务 并 使用SMTP发送邮件.

终端执行:

sudo apt-get install curl openssh-server ca-certificates postfix

添加Gitlab仓库并安装

1
2
curl -sS http://packages.gitlab.cc/install/gitlab-ce/script.deb.sh | sudo bash
sudo apt-get install gitlab-ce

另一种方式:可以下载deb包手动安装。

下载地址

选择合适的系统版本选择要安装的版本的包。

这里安装的是最新的版本8.15.4

找到对应的版本复制下载链接:

然后终端执行:下载包

wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ubuntu/pool/trusty/main/g/gitlab-ce/gitlab-ce_8.15.4-ce.1_amd64.deb

然后执行:安装包

dkpg -i gitlab-ce_8.15.4-ce.1_amd64.deb

启动Gitlab

sudo gitlab-ctl reconfigure

浏览器访问

首次访问GitLab,系统会让你重新设置管理员的密码,设置成功后会返回登录界面.

默认的管理员账号是root,如果你想更改默认管理员账号,请输入上面设置的新密码登录系统后修改帐号名.

配置

配置文件地址:/etc/gitlab/gitlab.rb
修改external_url 'http://192.168.18.99'
这一项改为你的ip或者你的域名。改完后执行

sudo gitlab-ctl reconfigure
然后就可以访问。

这里使用的是gitlab中自带的nginx服务,如果使用已经安装的nginx服务器的话需要进行下面的配置。

nginx 增加虚拟主机配置

修改nginx的配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# gitlab socket 文件地址
upstream gitlab {
# 7.x 版本在此位置
# server unix:/var/opt/gitlab/gitlab-rails/tmp/sockets/gitlab.socket;
# 8.0 位置
server unix:/var/opt/gitlab/gitlab-rails/sockets/gitlab.socket;
}

server {
listen *:80;
server_name gitlab.liaohuqiu.com; # 请修改为你的域名
server_tokens off; # don't show the version number, a security best practice
root /opt/gitlab/embedded/service/gitlab-rails/public;

# Increase this if you want to upload large attachments
# Or if you want to accept large git objects over http
client_max_body_size 250m;

# individual nginx logs for this gitlab vhost
access_log /var/log/gitlab/nginx/gitlab_access.log;
error_log /var/log/gitlab/nginx/gitlab_error.log;

location / {
# serve static files from defined root folder;.
# @gitlab is a named location for the upstream fallback, see below
try_files $uri $uri/index.html $uri.html @gitlab;
}

# if a file, which is not found in the root folder is requested,
# then the proxy pass the request to the upsteam (gitlab unicorn)
location @gitlab {
# If you use https make sure you disable gzip compression
# to be safe against BREACH attack
proxy_read_timeout 300; # Some requests take more than 30 seconds.
proxy_connect_timeout 300; # Some requests take more than 30 seconds.
proxy_redirect off;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Frame-Options SAMEORIGIN;
proxy_pass http://gitlab;
}
# Enable gzip compression as per rails guide: http://guides.rubyonrails.org/asset_pipeline.html#gzip-compression
# WARNING: If you are using relative urls do remove the block below
# See config/application.rb under "Relative url support" for the list of
# other files that need to be changed for relative url support
location ~ ^/(assets)/ {
root /opt/gitlab/embedded/service/gitlab-rails/public;
# gzip_static on; # to serve pre-gzipped version
expires max;
add_header Cache-Control public;
}

error_page 502 /502.html;
}

然后禁用gitlab自带的nginx

修改/etc/gitlab/gitlab.rb找到nginx['enable'] = false这一项设置为false。

然后重启nginx、重启gitlab。

server nginx restart

sudo gitlab-ctl reconfigure

然后就可以访问。

注意:在修改nginx的配置文件的时候可以选择监听其他端口。可以不是80端口。同样在gitlab的配置文件中也要做相应修改。访问的时候域名后面跟上监听的端口就可以。

参考文章:

gitlab中文网安装步骤

详细文档

记录一些在使用Linux中的小技巧

Linux中使用技巧

Ubuntu忘记root用户名密码

分两种情况,一种知道其他用户密码,另一种忘记所有密码。

知道其他用户密码

只要在终端执行sudo passwd root然后输入当前用户密码,就可以重置root用户密码。

密码全都忘记

  • 在启动Linux的时候长按shirt进入grud菜单。选择Advanced options for Ubuntu

  • 然后按e进入编辑模式

  • 然后在结尾添加quiet splash rw init=/bin/bash

  • 然后按ctrl+x进入单用户模式,在这个模式下修改root密码

  • 然后按ctrl+alt+del重启就可以了

Ubuntu修改语言

一台本地服务器默认的安装语言是中文导致在终端下使用很不方便。所以这里修改下本地的语言。

需要修改配置文件/etc/default/locale将里面的

1
2
3
4
5
6
7
LANG="zh_CN.UTF-8"
LANGUAGE="zh_CN:zh"

改为

LANG="en_US.UTF-8"
LANGUAGE="en_US:en"

然后重启后就可以生效。