설치 환경 : CentOS7 (64Bit)

설치 DB  : MariaDB 10.1

MariaDB.org 에서 권장하는 다음 URL 통해서 해당 Linux Repository 다운 받은  Yum 명령어를 이용하여 설치 한다.

https://downloads.mariadb.org/mariadb/repositories/#mirror=kaist

 


 

 사이트에서 설치 하고자 하는 서버  MariaDB 선택하게 되면 Repository파일을 만들  있는 정보를 준다.

해당 정보를 이용하여 /etc/yum.repos.d/MariaDB.repo  파일을 생성하고 다음의 내용을 추가 한다.

 

# MariaDB 10.1 CentOS repository list - created 2016-07-29 06:58 UTC

http://downloads.mariadb.org/mariadb/repositories/

[mariadb]

name = MariaDB

baseurl = http://yum.mariadb.org/10.1/centos7-amd64

gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB

gpgcheck=1

 

필요한 패키지 인스톨

[root@localhost ~]# yum install rsync nmap lsof perl-DBI nc

 

1. MariaDB 설치

 

0. SELinux Disable

[root@MariaCluster1 ~]# vi /etc/selinux/config

SELINUX=disabled

[root@MariaCluster1 ~]# reboot

[root@MariaCluster1 ~]# sestatus

SELinux status:                 disabled

 

1. FireWall Disable & Stop

[root@MariaCluster1 ~]# systemctl status firewalld

[root@MariaCluster1 ~]# systemctl disable firewalld

[root@MariaCluster1 ~]# systemctl stop firewalld

[root@MariaCluster1 ~]# systemctl status firewalld

 

2. MariaDB Install

root 유저로 다음 명령어 수행   (참조 URL : https://mariadb.com/kb/en/mariadb/yum/ )

[root@MariaCluster1 yum.repos.d]# yum install MariaDB-server MariaDB-client MariaDB-compat galera socat jemalloc

Installed:

  MariaDB-client.x86_64 0:10.1.16-1.el7.centos

  MariaDB-compat.x86_64 0:10.1.16-1.el7.centos

  MariaDB-server.x86_64 0:10.1.16-1.el7.centos

  MariaDB-shared.x86_64 0:10.1.16-1.el7.centos

  galera.x86_64 0:25.3.15-1.rhel7.el7.centos

  jemalloc.x86_64 0:3.6.0-1.el7

  socat.x86_64 0:1.7.2.2-5.el7

Dependency Installed:

  MariaDB-common.x86_64 0:10.1.16-1.el7.centos

  boost-program-options.x86_64 0:1.53.0-25.el7

Replaced:

  mariadb-libs.x86_64 1:5.5.44-2.el7.centos

Complete!

3. Start MariaDB & Setup Root password

[root@localhost ~]# service mysql start

Starting mysql (via systemctl):                            [  OK  ]

[root@localhost ~]# mysql_secure_installation

 

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB

      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

 

In order to log into MariaDB to secure it, we'll need the current

password for the root user.  If you've just installed MariaDB, and

you haven't set the root password yet, the password will be blank,

so you should just press enter here.

 

Enter current password for root (enter for none):

OK, successfully used password, moving on...

 

Setting the root password ensures that nobody can log into the MariaDB

root user without the proper authorisation.

 

Set root password? [Y/n] y      

New password:                   <--- root1122

Re-enter new password:

Password updated successfully!

Reloading privilege tables..

 ... Success!

 

 

By default, a MariaDB installation has an anonymous user, allowing anyone

to log into MariaDB without having to have a user account created for

them.  This is intended only for testing, and to make the installation

go a bit smoother.  You should remove them before moving into a

production environment.

 

Remove anonymous users? [Y/n] y

 ... Success!

 

Normally, root should only be allowed to connect from 'localhost'.  This

ensures that someone cannot guess at the root password from the network.

 

Disallow root login remotely? [Y/n] n

 ... skipping.

 

By default, MariaDB comes with a database named 'test' that anyone can

access.  This is also intended only for testing, and should be removed

before moving into a production environment.

 

Remove test database and access to it? [Y/n] y

 - Dropping test database...

 ... Success!

 - Removing privileges on test database...

 ... Success!

 

Reloading the privilege tables will ensure that all changes made so far

will take effect immediately.

 

Reload privilege tables now? [Y/n] y

 ... Success!

 

Cleaning up...

 

All done!  If you've completed all of the above steps, your MariaDB

installation should now be secure.

 

Thanks for using MariaDB!

 

여기까지 설치 하면 기본 MariaDB 설치가 완료  것임이후 부터는 Galera Cluster 사용하기 위한 설정 .

 

2. Galera Cluster 환경 설정

 

노드가 짝수  경우 Split Brain 문제가 발생   있다고 하는데그래서 홀수로 노드를 구성하는 것을 추천한다는 글이 있음. (Galera Cluster에서 권장하는 최소 홀수 개수는 3 .)

Galera 사용하는 포트는 3306,4567, 4568, 4444 포트를 사용하는데 이중 4444 포트가 Warm 바이러스에서 사용하는 것이 있으므로 4444 포트는 변경해서 사용하는 것이 좋다.

(wsrep_sst_receive_address 부분에서 변경 하면 )

 

[root@MariaCluster1 ~]# vi /etc/my.cnf.d/server.cnf  (Cluster Node1) 파일에 다음 내용을 추가한다.

 

[root@localhost ~]# cat /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

 

192.168.10.11   ma1

192.168.10.12   ma2

192.168.10.13   ma3

 

 

[root@localhost ~]# vi /etc/my.cnf.d/server.cnf

#

# These groups are read by MariaDB server.

# Use it for options that only the server (but not clients) should see

#

# See the examples of server my.cnf files in /usr/share/mysql/

#

 

# this is read by the standalone daemon and embedded servers

[server]

 

# this is only for the mysqld standalone daemon

[mysqld]

 

#

# * Galera-related settings

#

[galera]

# Mandatory settings

wsrep_on=ON

wsrep_provider=/usr/lib64/galera/libgalera_smm.so

wsrep_cluster_address='gcomm://'                      <-- 초기 설치  Node1 아이피 입력  해준다

wsrep_cluster_name='galera'                           <-- 클러스터 이름

wsrep_node_address='192.168.10.11'                    <-- 서버 아이피

wsrep_node_name='ma1'                                 <-- 서버 호스트 이름

wsrep_sst_method=rsync

binlog_format=row

default_storage_engine=InnoDB

innodb_autoinc_lock_mode=2

bind-address=0.0.0.0

#

# Allow server to accept connections on all interfaces.

#

#bind-address=0.0.0.0

#

# Optional setting

#wsrep_slave_threads=1

#innodb_flush_log_at_trx_commit=0

 

# this is only for embedded server

[embedded]

 

# This group is only read by MariaDB servers, not by MySQL.

# If you use the same .cnf file for MySQL and MariaDB,

# you can put MariaDB-only options here

[mariadb]

 

# This group is only read by MariaDB-10.1 servers.

# If you use the same .cnf file for MariaDB of different versions,

# use this group for options that older servers don't understand

[mariadb-10.1]

 

 

 

3. Galera Cluster 최초 실행

노드1 최초로 기동되는 MariaDB Doner이기에 --wsrep-new-cluster 옵션으로 시작해 주어야 .  (cluster 초기화 작업)

 

[root@localhost ~]# service mysql stop

Stopping mysql (via systemctl):                            [  OK  ]

[root@localhost ~]# /etc/init.d/mysql start --wsrep-new-cluster

Starting mysql (via systemctl):                            [  OK  ]

[root@localhost ~]# mysql -uroot -proot1122 -e "show status like 'wsrep%'"

 

+------------------------------+---------------------------------------------+

| Variable_name                | Value                                       |

+------------------------------+---------------------------------------------+

| wsrep_apply_oooe             | 0.000000                                    |

| wsrep_apply_oool             | 0.000000                                    |

| wsrep_apply_window           | 0.000000                                    |

| wsrep_causal_reads           | 0                                           |

| wsrep_cert_deps_distance     | 0.000000                                    |

| wsrep_cert_index_size        | 0                                           |

| wsrep_cert_interval          | 0.000000                                    |

| wsrep_cluster_conf_id        | 1                                           |

wsrep_cluster_size           | 1                                           |

| wsrep_cluster_state_uuid     | 64dea1cf-5562-11e6-895b-9ea4811cc370        |

| wsrep_cluster_status         | Primary                                     |

| wsrep_commit_oooe            | 0.000000                                    |

| wsrep_commit_oool            | 0.000000                                    |

| wsrep_commit_window          | 0.000000                                    |

wsrep_connected              | ON                                          |

| wsrep_evs_delayed            |                                             |

| wsrep_evs_evict_list         |                                             |

| wsrep_evs_repl_latency       | 1.27e-06/4.0364e-06/7.404e-06/2.25523e-06/5 |

| wsrep_evs_state              | OPERATIONAL                                 |

| wsrep_flow_control_paused    | 0.000000                                    |

| wsrep_flow_control_paused_ns | 0                                           |

| wsrep_flow_control_recv      | 0                                           |

| wsrep_flow_control_sent      | 0                                           |

| wsrep_gcomm_uuid             | 64dd9778-5562-11e6-9c7a-96000eb646f4        |

wsrep_incoming_addresses     | 192.168.10.11:3306                          |

| wsrep_last_committed         | 0                                           |

| wsrep_local_bf_aborts        | 0                                           |

| wsrep_local_cached_downto    | 18446744073709551615                        |

| wsrep_local_cert_failures    | 0                                           |

| wsrep_local_commits          | 0                                           |

| wsrep_local_index            | 0                                           |

| wsrep_local_recv_queue       | 0                                           |

| wsrep_local_recv_queue_avg   | 0.500000                                    |

| wsrep_local_recv_queue_max   | 2                                           |

| wsrep_local_recv_queue_min   | 0                                           |

| wsrep_local_replays          | 0                                           |

| wsrep_local_send_queue       | 0                                           |

| wsrep_local_send_queue_avg   | 0.000000                                    |

| wsrep_local_send_queue_max   | 1                                           |

| wsrep_local_send_queue_min   | 0                                           |

| wsrep_local_state            | 4                                           |

wsrep_local_state_comment    | Synced                                      |

| wsrep_local_state_uuid       | 64dea1cf-5562-11e6-895b-9ea4811cc370        |

| wsrep_protocol_version       | 7                                           |

| wsrep_provider_name          | Galera                                      |

| wsrep_provider_vendor        | Codership Oy <info@codership.com>           |

| wsrep_provider_version       | 25.3.15(r3578)                              |

wsrep_ready                  | ON                                          |

| wsrep_received               | 2                                           |

| wsrep_received_bytes         | 140                                         |

| wsrep_repl_data_bytes        | 0                                           |

| wsrep_repl_keys              | 0                                           |

| wsrep_repl_keys_bytes        | 0                                           |

| wsrep_repl_other_bytes       | 0                                           |

| wsrep_replicated             | 0                                           |

| wsrep_replicated_bytes       | 0                                           |

| wsrep_thread_count           | 2                                           |

+------------------------------+---------------------------------------------+

 

[root@localhost ~]# service mysql stop

Stopping mysql (via systemctl):                            [  OK  ]

[root@localhost ~]# ps -ef | grep mysql

root      2806  1961  0 17:05 pts/0    00:00:00 grep --color=auto mysql

 

 

 

4. VM 이미지 복제  설정 파일들 변경

VM 이미지 복제  아이피, hostname,  /etc/my.cnf.d/server.cnf 파일에서 아이피이름 부분 수정

각각의 서버간의 통신에 문제가 있는지 ping check

 

[root@ma2 ~]# vi /etc/my.cnf.d/server.cnf

[galera]

# Mandatory settings

wsrep_on=ON

wsrep_provider=/usr/lib64/galera/libgalera_smm.so

wsrep_cluster_address='gcomm://192.168.10.11'

wsrep_cluster_name='galera'

wsrep_node_address='192.168.10.12'

wsrep_node_name='ma2'

wsrep_sst_method=rsync

binlog_format=row

default_storage_engine=InnoDB

innodb_autoinc_lock_mode=2

bind-address=0.0.0.0

[root@ma3 ~]# vi /etc/my.cnf.d/server.cnf

[galera]

# Mandatory settings

wsrep_on=ON

wsrep_provider=/usr/lib64/galera/libgalera_smm.so

wsrep_cluster_address='gcomm://192.168.10.11'

wsrep_cluster_name='galera'

wsrep_node_address='192.168.10.13'

wsrep_node_name='ma3'

wsrep_sst_method=rsync

binlog_format=row

default_storage_engine=InnoDB

innodb_autoinc_lock_mode=2

bind-address=0.0.0.0

 

5.  3 노드 Mysql 기동

 

Cluster Node1

[root@ma1 ~]# service mysql start

Starting mysql (via systemctl):                            [  OK  ]

[root@ma1 ~]# ps -ef | grep mysql

mysql     2241     1  2 17:51 ?        00:00:00 /usr/sbin/mysqld --wsrep_start_position=64dea1cf-5562-11e6-895b-9ea4811cc370:0

root      2277  2080  0 17:51 pts/0    00:00:00 grep --color=auto mysql

[root@ma1 ~]# mysql -uroot -proot1122 -e "show status like 'wsrep%'"

+------------------------------+-------------------------------------------------------------+

| Variable_name                | Value                                                       |

+------------------------------+-------------------------------------------------------------+

| wsrep_apply_oooe             | 0.000000                                                    |

| wsrep_apply_oool             | 0.000000                                                    |

| wsrep_apply_window           | 0.000000                                                    |

| wsrep_causal_reads           | 0                                                           |

| wsrep_cert_deps_distance     | 0.000000                                                    |

| wsrep_cert_index_size        | 0                                                           |

| wsrep_cert_interval          | 0.000000                                                    |

| wsrep_cluster_conf_id        | 2                                                           |

| wsrep_cluster_size           | 3                                                           |

| wsrep_cluster_state_uuid     | 64dea1cf-5562-11e6-895b-9ea4811cc370                        |

| wsrep_cluster_status         | Primary                                                     |

| wsrep_commit_oooe            | 0.000000                                                    |

| wsrep_commit_oool            | 0.000000                                                    |

| wsrep_commit_window          | 0.000000                                                    |

wsrep_connected              | ON                                                          |

| wsrep_evs_delayed            |                                                             |

| wsrep_evs_evict_list         |                                                             |

| wsrep_evs_repl_latency       | 0.00161089/0.00182341/0.00203593/0.000212524/2              |

| wsrep_evs_state              | OPERATIONAL                                                 |

| wsrep_flow_control_paused    | 0.000000                                                    |

| wsrep_flow_control_paused_ns | 0                                                           |

| wsrep_flow_control_recv      | 0                                                           |

| wsrep_flow_control_sent      | 0                                                           |

| wsrep_gcomm_uuid             | a7629206-5569-11e6-94e1-afdd9f9afb23                        |

wsrep_incoming_addresses     | 192.168.10.12:3306,192.168.10.13:3306,192.168.10.11:3306    |

| wsrep_last_committed         | 0                                                           |

| wsrep_local_bf_aborts        | 0                                                           |

| wsrep_local_cached_downto    | 18446744073709551615                                        |

| wsrep_local_cert_failures    | 0                                                           |

| wsrep_local_commits          | 0                                                           |

| wsrep_local_index            | 2                                                           |

| wsrep_local_recv_queue       | 0                                                           |

| wsrep_local_recv_queue_avg   | 0.333333                                                    |

| wsrep_local_recv_queue_max   | 2                                                           |

| wsrep_local_recv_queue_min   | 0                                                           |

| wsrep_local_replays          | 0                                                           |

| wsrep_local_send_queue       | 0                                                           |

| wsrep_local_send_queue_avg   | 0.000000                                                    |

| wsrep_local_send_queue_max   | 1                                                           |

| wsrep_local_send_queue_min   | 0                                                           |

| wsrep_local_state            | 4                                                           |

wsrep_local_state_comment    | Synced                                                      |

| wsrep_local_state_uuid       | 64dea1cf-5562-11e6-895b-9ea4811cc370                        |

| wsrep_protocol_version       | 7                                                           |

| wsrep_provider_name          | Galera                                                      |

| wsrep_provider_vendor        | Codership Oy <info@codership.com>                           |

| wsrep_provider_version       | 25.3.15(r3578)                                              |

wsrep_ready                  | ON                                                          |

| wsrep_received               | 3                                                           |

| wsrep_received_bytes         | 412                                                         |

| wsrep_repl_data_bytes        | 0                                                           |

| wsrep_repl_keys              | 0                                                           |

| wsrep_repl_keys_bytes        | 0                                                           |

| wsrep_repl_other_bytes       | 0                                                           |

| wsrep_replicated             | 0                                                           |

| wsrep_replicated_bytes       | 0                                                           |

| wsrep_thread_count           | 2                                                           |

+------------------------------+-------------------------------------------------------------+

 

Cluster Node#2

[root@ma2 ~]# service mysql start

Starting mysql (via systemctl):                            [  OK  ]

[root@ma2 ~]# ps -ef | grep mysql

mysql     2237     1  2 17:51 ?        00:00:00 /usr/sbin/mysqld --wsrep_start_position=64dea1cf-5562-11e6-895b-9ea4811cc370:0

root      2272  2079  0 17:51 pts/0    00:00:00 grep --color=auto mysql

[root@ma2 ~]# mysql -uroot -proot1122 -e "show status like 'wsrep%'"

+------------------------------+-------------------------------------------------------------+

| Variable_name                | Value                                                       |

+------------------------------+-------------------------------------------------------------+

| wsrep_apply_oooe             | 0.000000                                                    |

| wsrep_apply_oool             | 0.000000                                                    |

| wsrep_apply_window           | 0.000000                                                    |

| wsrep_causal_reads           | 0                                                           |

| wsrep_cert_deps_distance     | 0.000000                                                    |

| wsrep_cert_index_size        | 0                                                           |

| wsrep_cert_interval          | 0.000000                                                    |

| wsrep_cluster_conf_id        | 2                                                           |

| wsrep_cluster_size           | 3                                                           |

| wsrep_cluster_state_uuid     | 64dea1cf-5562-11e6-895b-9ea4811cc370                        |

| wsrep_cluster_status         | Primary                                                     |

| wsrep_commit_oooe            | 0.000000                                                    |

| wsrep_commit_oool            | 0.000000                                                    |

| wsrep_commit_window          | 0.000000                                                    |

wsrep_connected              | ON                                                          |

| wsrep_evs_delayed            |                                                             |

| wsrep_evs_evict_list         |                                                             |

| wsrep_evs_repl_latency       | 0.00188361/0.00507755/0.016603/0.00577088/5                 |

| wsrep_evs_state              | OPERATIONAL                                                 |

| wsrep_flow_control_paused    | 0.000000                                                    |

| wsrep_flow_control_paused_ns | 0                                                           |

| wsrep_flow_control_recv      | 0                                                           |

| wsrep_flow_control_sent      | 0                                                           |

| wsrep_gcomm_uuid             | a6fe8bc1-5569-11e6-81dc-d3f0acf3a5d7                        |

wsrep_incoming_addresses     | 192.168.10.12:3306,192.168.10.13:3306,192.168.10.11:3306    |

| wsrep_last_committed         | 0                                                           |

| wsrep_local_bf_aborts        | 0                                                           |

| wsrep_local_cached_downto    | 18446744073709551615                                        |

| wsrep_local_cert_failures    | 0                                                           |

| wsrep_local_commits          | 0                                                           |

| wsrep_local_index            | 0                                                           |

| wsrep_local_recv_queue       | 0                                                           |

| wsrep_local_recv_queue_avg   | 0.000000                                                    |

| wsrep_local_recv_queue_max   | 1                                                           |

| wsrep_local_recv_queue_min   | 0                                                           |

| wsrep_local_replays          | 0                                                           |

| wsrep_local_send_queue       | 0                                                           |

| wsrep_local_send_queue_avg   | 0.000000                                                    |

| wsrep_local_send_queue_max   | 1                                                           |

| wsrep_local_send_queue_min   | 0                                                           |

| wsrep_local_state            | 4                                                           |

wsrep_local_state_comment    | Synced                                                      |

| wsrep_local_state_uuid       | 64dea1cf-5562-11e6-895b-9ea4811cc370                        |

| wsrep_protocol_version       | 7                                                           |

| wsrep_provider_name          | Galera                                                      |

| wsrep_provider_vendor        | Codership Oy <info@codership.com>                           |

| wsrep_provider_version       | 25.3.15(r3578)                                              |

wsrep_ready                  | ON                                                          |

| wsrep_received               | 2                                                           |

| wsrep_received_bytes         | 279                                                         |

| wsrep_repl_data_bytes        | 0                                                           |

| wsrep_repl_keys              | 0                                                           |

| wsrep_repl_keys_bytes        | 0                                                           |

| wsrep_repl_other_bytes       | 0                                                           |

| wsrep_replicated             | 0                                                           |

| wsrep_replicated_bytes       | 0                                                           |

| wsrep_thread_count           | 2                                                           |

+------------------------------+-------------------------------------------------------------+

 

Cluster Node3

[root@ma3 ~]# service mysql start

Starting mysql (via systemctl):                            [  OK  ]

[root@ma3 ~]# ps -ef | grep mysql

mysql     2238     1  2 17:51 ?        00:00:00 /usr/sbin/mysqld --wsrep_start_position=64dea1cf-5562-11e6-895b-9ea4811cc370:0

root      2274  2080  0 17:51 pts/0    00:00:00 grep --color=auto mysql

[root@ma3 ~]# mysql -uroot -proot1122 -e "show status like 'wsrep%'"

+------------------------------+-------------------------------------------------------------+

| Variable_name                | Value                                                       |

+------------------------------+-------------------------------------------------------------+

| wsrep_apply_oooe             | 0.000000                                                    |

| wsrep_apply_oool             | 0.000000                                                    |

| wsrep_apply_window           | 0.000000                                                    |

| wsrep_causal_reads           | 0                                                           |

| wsrep_cert_deps_distance     | 0.000000                                                    |

| wsrep_cert_index_size        | 0                                                           |

| wsrep_cert_interval          | 0.000000                                                    |

| wsrep_cluster_conf_id        | 2                                                           |

| wsrep_cluster_size           | 3                                                           |

| wsrep_cluster_state_uuid     | 64dea1cf-5562-11e6-895b-9ea4811cc370                        |

| wsrep_cluster_status         | Primary                                                     |

| wsrep_commit_oooe            | 0.000000                                                    |

| wsrep_commit_oool            | 0.000000                                                    |

| wsrep_commit_window          | 0.000000                                                    |

wsrep_connected              | ON                                                          |

| wsrep_evs_delayed            |                                                             |

| wsrep_evs_evict_list         |                                                             |

| wsrep_evs_repl_latency       | 0.00204262/0.00700795/0.0159775/0.00635458/3                |

| wsrep_evs_state              | OPERATIONAL                                                 |

| wsrep_flow_control_paused    | 0.000000                                                    |

| wsrep_flow_control_paused_ns | 0                                                           |

| wsrep_flow_control_recv      | 0                                                           |

| wsrep_flow_control_sent      | 0                                                           |

| wsrep_gcomm_uuid             | a7235184-5569-11e6-bdf1-378df73b1c93                        |

wsrep_incoming_addresses     | 192.168.10.12:3306,192.168.10.13:3306,192.168.10.11:3306    |

| wsrep_last_committed         | 0                                                           |

| wsrep_local_bf_aborts        | 0                                                           |

| wsrep_local_cached_downto    | 18446744073709551615                                        |

| wsrep_local_cert_failures    | 0                                                           |

| wsrep_local_commits          | 0                                                           |

| wsrep_local_index            | 1                                                           |

| wsrep_local_recv_queue       | 0                                                           |

| wsrep_local_recv_queue_avg   | 0.000000                                                    |

| wsrep_local_recv_queue_max   | 1                                                           |

| wsrep_local_recv_queue_min   | 0                                                           |

| wsrep_local_replays          | 0                                                           |

| wsrep_local_send_queue       | 0                                                           |

| wsrep_local_send_queue_avg   | 0.000000                                                    |

| wsrep_local_send_queue_max   | 1                                                           |

| wsrep_local_send_queue_min   | 0                                                           |

| wsrep_local_state            | 4                                                           |

wsrep_local_state_comment    | Synced                                                      |

| wsrep_local_state_uuid       | 64dea1cf-5562-11e6-895b-9ea4811cc370                        |

| wsrep_protocol_version       | 7                                                           |

| wsrep_provider_name          | Galera                                                      |

| wsrep_provider_vendor        | Codership Oy <info@codership.com>                           |

| wsrep_provider_version       | 25.3.15(r3578)                                              |

wsrep_ready                  | ON                                                          |

| wsrep_received               | 2                                                           |

| wsrep_received_bytes         | 279                                                         |

| wsrep_repl_data_bytes        | 0                                                           |

| wsrep_repl_keys              | 0                                                           |

| wsrep_repl_keys_bytes        | 0                                                           |

| wsrep_repl_other_bytes       | 0                                                           |

| wsrep_replicated             | 0                                                           |

| wsrep_replicated_bytes       | 0                                                           |

| wsrep_thread_count           | 2                                                           |

+------------------------------+-------------------------------------------------------------+

 

 

이제 3개의 DB에서 동일 데이터를 가지고 작업이 가능하다.



출처: http://bstar36.tistory.com/298 [멋지게 놀아라]

출처 : http://www.morenice.kr/72

linux 시스템에서 프로세스를 통하여 파일을 열 수 있다. 

여기서 파일이란 데이터를 담을 수 있는 파일 뿐만 아니라, 통신을 위한 socket, event_poll 등 file descriptor, 라이브러리 파일, char device까지 포함한다. 개발된 프로그램이 소켓을 사용하여 통신하는 경우 실제로 소켓이 열려 있는지 디버깅을 위한 용도, 그리고 프로세스가 열 수 있는 파일의 갯수가 한정되어지기 때문에 시스템 모니터링을 위해서 열려진 파일이 얼마만큼인지 확인하는 용도등으로 파일을 확인하는 방법은 필요하다.


결론부터 말하자면, lsof(list open file)라는 명령어를 통하여 모든 프로세스에 대하여 열고 있는 파일에 대하여 확인할 수 있다.

root@ubuntu:~# lsof
COMMAND    PID     USER   FD      TYPE     DEVICE SIZE/OFF       NODE NAME
init         1     root  cwd       DIR      252,0     4096          2 /
init         1     root  rtd       DIR      252,0     4096          2 /
init         1     root  txt       REG      252,0   124704    2490376 /sbin/init
init         1     root  mem       REG      252,0    79672    1441818 /lib/i386-linux-gnu/libnsl-2.13.so
init         1     root  mem       REG      252,0    30684    1441811 /lib/i386-linux-gnu/librt-2.13.so
init         1     root  mem       REG      252,0  1434180    1441809 /lib/i386-linux-gnu/libc-2.13.so
init         1     root  mem       REG      252,0    38500    1441821 /lib/i386-linux-gnu/libnss_nis-2.13.so
init         1     root  mem       REG      252,0   117960    1441832 /lib/i386-linux-gnu/ld-2.13.so
init         1     root  mem       REG      252,0    42580    1441834 /lib/i386-linux-gnu/libnss_files-2.13.so
init         1     root  mem       REG      252,0    29984    1441858 /lib/libnih-dbus.so.1.0.0
init         1     root  mem       REG      252,0    26400    1441822 /lib/i386-linux-gnu/libnss_compat-2.13.so
init         1     root  mem       REG      252,0    75040    1441860 /lib/libnih.so.1.0.0
init         1     root  mem       REG      252,0   121644    1441827 /lib/i386-linux-gnu/libpthread-2.13.so
init         1     root  mem       REG      252,0   243400    1441799 /lib/i386-linux-gnu/libdbus-1.so.3.5.4
init         1     root    0u      CHR        1,3      0t0       5396 /dev/null
init         1     root    1u      CHR        1,3      0t0       5396 /dev/null
init         1     root    2u      CHR        1,3      0t0       5396 /dev/null
init         1     root    3r     FIFO        0,8      0t0        928 pipe
init         1     root    4w     FIFO        0,8      0t0        928 pipe
...
...



COMMAND와 PID 필드가 있기 때문에 본인이 필요한 내용을 grep을 통해서 보는 방향이 편리하다.

root@ubuntu:~# lsof | grep sshd
sshd      2169     root  cwd       DIR      252,0     4096          2 /
sshd      2169     root  rtd       DIR      252,0     4096          2 /
sshd      2169     root  txt       REG      252,0   470240    1713853 /usr/sbin/sshd
sshd      2169     root  mem       REG      252,0   117960    1441832 /lib/i386-linux-gnu/ld-2.13.so
sshd      2169     root  mem       REG      252,0    79476    1442028 /lib/i386-linux-gnu/libz.so.1.2.3.4
sshd      2169     root  mem       REG      252,0    79672    1441818 /lib/i386-linux-gnu/libnsl-2.13.so
sshd      2169     root  mem       REG      252,0   140788    1705602 /usr/lib/i386-linux-gnu/libk5crypto.so.3.1
sshd      2169     root  mem       REG      252,0    26112    1705609 /usr/lib/i386-linux-gnu/libkrb5support.so.0.1
sshd      2169     root  mem       REG      252,0    46644    1446070 /lib/i386-
...
...



추가적으로 /proc을 조금만 뒤져보면 프로세스가 열고 있는 fd 정보를 확인할 수 있다. 프로그램이 실행되어 프로세스화 되면 /proc/PID로 디렉토리가 생성되고 그 안에 여러가지 정보를 담고 있고, 그 안에 fd라는 디렉토리를 열면 사용중인 fd(file descriptor)를 확인 가능하다. 

아래는 실행중인 아파치 프로세스의 PID(2285)를 기반으로 fd 디렉토리에서 ls한 결과이다. 0~2번까지는 시스템에서 자동으로 잡히는 fd영역이고, 3번부터 사용자(코드에서 열고 있는)에 의한 열린 fd 리스트들이다. socket과 pipe 그리고 로그를 적기 위한 데이터파일과 eventpoll을 열고 있다.

 

root@ubuntu:/proc/2285/fd# ls -al
합계 0
dr-x------ 2 root     root      0 2012-01-04 23:42 .
dr-xr-xr-x 7 www-data www-data  0 2012-01-04 23:41 ..
lr-x------ 1 root     root     64 2012-01-04 23:42 0 -> /dev/null
l-wx------ 1 root     root     64 2012-01-04 23:42 1 -> /dev/null
l-wx------ 1 root     root     64 2012-01-04 23:42 2 -> /var/log/apache2/error.log
lrwx------ 1 root     root     64 2012-01-04 23:42 3 -> socket:[13645]
lr-x------ 1 root     root     64 2012-01-04 23:42 4 -> pipe:[11969]
l-wx------ 1 root     root     64 2012-01-04 23:42 5 -> pipe:[11969]
l-wx------ 1 root     root     64 2012-01-04 23:42 6 -> /var/log/apache2/other_vhosts_access.log
l-wx------ 1 root     root     64 2012-01-04 23:42 7 -> /var/log/apache2/access.log
lrwx------ 1 root     root     64 2012-01-04 23:42 8 -> anon_inode:[eventpoll]







여기서 잠깐!!! 

lsof는 내부적으로 어떤 동작을 하는지 궁금해서 strace 해보았다. 실제로 lsof에서도 /proc/ 디렉토리 아래의 PID(process id)의 디렉토리 각각 들어가 필요한 정보를 읽어들인다.

  • stat File
  • cwd File
  • root File
  • exe File
  • maps File
  • fd Directory
  • fd_info Directory



strace 결과 내용중에서 apache(pid:2285)에 대해서 처리하는 내용을 일부 첨부한다.

4904 stat64("/proc/2285/", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
4905 open("/proc/2285/stat", O_RDONLY|O_LARGEFILE) = 4
4906 read(4, "2285 (apache2) S 2274 2274 2274 "..., 4096) = 199
4907 close(4)                                = 0
4908 readlink("/proc/2285/cwd", "/"..., 4096) = 1
4909 stat64("/proc/2285/cwd", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
4910 readlink("/proc/2285/root", "/", 4096)  = 1
4911 stat64("/proc/2285/root", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
4912 readlink("/proc/2285/exe", "/usr/lib/apache2/mpm-prefork/apache2"..., 4096) = 36
4913 stat64("/proc/2285/exe", {st_mode=S_IFREG|0755, st_size=1296895, ...}) = 0
4914 open("/proc/2285/maps", O_RDONLY|O_LARGEFILE) = 4
4915 read(4, "00110000-0012d000 r-xp 00000000 "..., 4096) = 4057
4916 stat64("/usr/lib/libaprutil-1.so.0.3.9", {st_mode=S_IFREG|0644, st_size=120884, ...}) = 0
4917 stat64("/lib/i386-linux-gnu/libdl-2.13.so", {st_mode=S_IFREG|0644, st_size=9736, ...}) = 0
4918 stat64("/usr/lib/apache2/modules/mod_authz_user.so", {
...
...
4969 open("/proc/2285/fd", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = 4
4970 getdents64(4, /* 11 entries */, 32768)  = 264
4971 readlink("/proc/2285/fd/0", "/dev/null"..., 4096) = 9
4972 lstat64("/proc/2285/fd/0", {st_mode=S_IFLNK|0500, st_size=64, ...}) = 0
4973 stat64("/proc/2285/fd/0", {st_mode=S_IFCHR|0666, st_rdev=makedev(1, 3), ...}) = 0
4974 open("/proc/2285/fdinfo/0", O_RDONLY|O_LARGEFILE) = 7
4975 fstat64(7, {st_mode=S_IFREG|0400, st_size=0, ...}) = 0
4976 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb78c1000
4977 read(7, "pos:\t0\nflags:\t00\n", 1024)  = 17
4978 close(7)                                = 0
4979 munmap(0xb78c1000, 4096)                = 0
4980 readlink("/proc/2285/fd/1", "/dev/null", 4096) = 9
4981 lstat64("/proc/2285/fd/1", {st_mode=S_IFLNK|0300, st_size=64, ...}) = 0
4982 stat64("/proc/2285/fd/1", {st_mode=S_IFCHR|0666, st_rdev=makedev(1, 3), ...}) = 0
4983 open("/proc/2285/fdinfo/1", O_RDONLY|O_LARGEFILE) = 7
4984 fstat64(7, {st_mode=S_IFREG|0400, st_size=0, ...}) = 0
...


'Programming > Server' 카테고리의 다른 글

[FCM] 서버측 UnknownHostException  (0) 2018.10.01
[CentOS 7] systemd 기본 설정  (0) 2018.09.30
크롤링 robots.txt 주의점  (0) 2018.09.19
리눅스 터미널 명령어 종류  (0) 2018.09.17
[Linux] 포트 확인  (0) 2018.09.17

[Tip]리눅스 터미널 명령어 모음

pwd
설명 : 현재 작업 디렉토리를 절대 경로 명으로 출력한다.

ls [옵션] [파일명]
설명 : 윈도우 도스창의 'dir' 명령과 같은 명령으로, 현재 디렉토리 내의 파일과 디렉토리에 대한 정보를 출력해준다. [옵션]에는 -로 시작하여 아래와 같은 옵션을 지정할 수 있으며 두 개 이상의 옵션을 동시에 지정할 수 있다. [파일명]에는 파일명이나 디렉토리명을 지정할 수 있다.

옵션
-a 디렉토리 내의 모든파일(.으로 시작되는 파일 포함)을 출력
-i 파일의 아이노드(inode)번호를 출력
-h 파일의 크기를 쉬운 단위로 표시(k: 킬로바이트, m: 메가바이트)
-l 파일의 다양한 정보를 함께 출력(소유자 정보, 권한 정보, 크기, 날짜)
-m 파일을 쉼표로 구분하여 가로로 출력
-s kb 단위의파일크기를 출력
-t 파일을 최근에 생성된 시간순으로 출력
-F 파일의 형태와 함께 출력한다('*' : tlfgodvkdlf, '@' : 심볼릭링크, '/' : 디렉토리)
-R 서브 디렉토리의 내용을 포함하여 출력(즉 하위 디렉토리 내용을 모두 출력)
-S 파일을 크기순으로 출력
--help 도움말 출력


cd [디렉토리명]
설명 : cd(change directory) 작업 디렉토리를 바꾼다.

옵션
cd [엔터] 홈 디렉토리로 이동
cd ~ 또는 cd ~/ 홈 디렉토리로 이동
cd ~userid userid의 홈 디렉토리로 이동
cd ~/path/path2 홈 디렉토리 아래 path/paht2로 이동
cd - 바로 앞에 작업한 디렉토리로 이동
cd directory 지정한 directory로 옮겨진다
cd / root directory로 옮겨진다.
cd .. 현재 작업 directory의 parent directory로 옮겨진다.


작업하고 있는 경로를 기억시킨 뒤 나주에 다시 그 경로로 돌아오려면, 'pushd /겨로/'(현재 경로 기억 예 : pushd .) 하여 경로를 기억시킨 뒤 popd라는 명령을 주면 기억한 경로로 돌아간다. 이 명령은 한 번만 쓸 수 있다.

cp [옵션] [원본파일명] [목적 파일명 / 디렉토리명]
설명 : 도스창의 'copy'명령과 같은 명령으로 하나 이상의 원본 파일을 목적 파일이나 디렉토리로 복사한다. [원본 파일명]에는 하나 이상의 파일명을 지정할 수 있고 [목적 파일명 / 디렉토리명]에는 복사될 목적 파일명이나 복사된 파일이 위치할 목적 디렉토리를 지정할 수 있다. [옵션]에는 아래와 같은 옵션을 지정할 수 있다.

옵션
-i 파일 복사시 동일 파일명이 있을시에 사용자에게 덮어 쓸 것인지를 물어봄
-f 동일파일명 발생시에도 모두 강제적으로 복사함
-p 원본 파일의 시간 및 소유 권한 보존
-r 포함된 자식 디렉토리까지 모두 복사


mkdir [옵션] [파일명]
설명 : 새로운 디렉토리를 만든다. write permission이 허용되어야만 directory를 만들 수 있다.

옵션
-p 만들고자하는 디렉토리의 상위 디렉토리가 없는 경우 상위 디렉토리까지 같이 만든다.


rmdir [옵션] [파일명]
설명 : 디렉토리를 제거하기 위한 명령어, whrite permission이 허용되어야만 directory를 제거할수 있다.

옵션
-p 제거된 디렉토리에 대한 메시지가 표시됨
-s 제거된 디렉토리에 대한 메시지가 표시되지 않음.(Default)


more [파일명]
설명 : 한 화면씩 보기. 유닉스에서 커다란 텍스트 파일을 보는 것이나 많은 수의 파일과 서브디렉토리를 포함하는 디렉토리의 리스트를 보이게 하는 것은 아주 빠른 속도로 화면이 넘어가게 한다. 이럴 경우에 more나 pg 명령을 사용하여서 한 하면씩 보이게 할 수 있다. more filename을 입력하면 filename으로 지정한 파일을 한번에 한 화면에 해당하는 양 만큼씩 보여준다. 또한 출력을 more 명령으로 파이프(redirect) 시킬 수도 있다. 예를 들면 ls -al |more 는 ls 명령의 출력을 more로 보내어서 리스팅을 한 페이지씩 보이게 한다. more를 사용해서 파일을 살펴보는 일반적인 방법은 다음과 같다.

옵션
스페이스, Ctrl-D 다음 한 화면을 보여줌
엔터 누를 때마다 화면의 아래쪽에 한 줄씩 더 보여줌
q more 정지
h 도움말
/expr expression 검색


rm [옵션] [파일명]
설명 : rm(remove) 파일(디렉토리)을 삭제한다. 삭제하고자 하는 디렉토리에 파일이나 부 디렉토리가 없어야만 삭제가 가능하다.

옵션
-f 디렉토리 안의 파일을 삭제할 때 사용자에게 확인을 요구하지 않음
-r 인수 list 에서 지정한 디렉토리 혹은 그 아래의 subdirectory를 삭제
-i whrite permission 이 없는 파일의 삭제를 위해 대화식으로 확인
-p 디렉토리 dir-name과 비어있는 부모 디렉토리를 사용자가 제거할 수 있으며, 전체 경로명이 삭제 되거나 어떤 이유로 인해 경로명의 일부가 남은것과 무관하게 표준출력에 메세지가 출력됨
-s -p 선택항목 지정시 표준오류에 출력되는 메시지를 삭제


mv [옵션] [파일명]
설명 : mv 명령은 파일의 위치를 바꾸거나 이름을 바꾸는데 사용을 한다. mv 명령은 이미 존재하는 파일을 덮어쓰기를 한다. 'mv file1 file2'라고 입력을 하는 것은 file1의 이름을 file2라고 바꾼다. 만약 file2 라는 파일이 이미 존재한다면 file1의 내용물로 교체가 된다. 파일을 한 디렉토리에서 다른 디렉토리로 옮기기 위하여서는 경로를 함께 입력하여 주면 된다. 같은 이름의 파일이 이미 존재하여서 그것을 덮어쓰기를 하지 않으려면 -i 옵션을 사용하면 된다. 한번에 여러 개의 파이을 옮길수도 있다. 마지막이 파일들을 옮겨 넣고자 하는 디렉토리이기만 하면 되는 것이다. 예를 들면 'mv profit sales.txt wrksht repotrs'라고 하면 profit sales.txt wrksht를 모두 reports 디렉토리로 이동시킨다.

옵션
-f 대상 파일이 존재할 대 새로운 파일로 대체
-i 대상파일이 있을 때 확인 후 작업
-f 파일의 이동 과정을 보여준다.


find [옵션] [파일명]
설명 : 이제는 find라는 명령어를 알아보자. find라는 명령어는 매우 융통성이 있고 강력한 명령어이다. 파일을 이름, 수정날짜, 소유주, 허가 등을 기준으로 하여 검색하게 해준다.

옵션
-name filename filename과 일치하는 파일을 찾음(*,? 또는 and가 사용될 수 있으며 이들은 따옴표 안에 표시를 하거나 백슬래시를 앞에 주고 사용함)
-print 현재의 경로 이름을 표시


grep [옵션] [패턴] [파일명]
설명 : grep 명령을 사용하면 파일 내부에 있는 텍스트의 내용으로 파일을 찾을 수 있다. 지정한 문자들을 포함하는 행을 찾을 때마다 그 행을 화면에 표시한다. 만약 grep 하나 이상의 파일을 검색중이라면 그 문자들이 있는 파일의 이름을 표시한다.

옵션
-c 파일 내에서 패턴과 일치하는 줄의 총수를 구한다.
-h 여러 개의 파일을 검색할 때, 출력에 파일명이 나타나는 것을 방지한다.
-i 대, 소문자를 구별하지 않는다
-n 일치하는 줄의 줄 번호도 같이 출력한다
-v 패턴과 일치하지 않는 줄만 출력한다


head [-카운트] [파일명]
설명 : 파일의 첫 부분부터 카운트로 정한 숫자만큼의 줄 수를 보여주는 명령으로 카운트 징정을 안 하면 디폴트로 10이 된다.

tail [-카운트] [파일명]
설명 : 파일의 카운트로 정한 숫자만큼의 끝 부분 줄 수를 보여주는 명령으로 카운트를 지정을 안하면 디폴트로 10이 된다.

mount [-t 파일시스템] [장치명] [마운트디렉토리]
설명 : 각 운영체제나 혹은 CDROM같은 경우에는 저마다 자신의 파일 시스템을 사용하고 있다. 마운트라는 것은 특정 디렉토리에 자신이 원하는 파일 시스템을 연결하여 리눅스에서 볼 수 있는 명령이다.

리눅스의 파일 시스템 : ext2, ext3, ext4
윈도우 파일 시스템 : vfat, ntfs
CDROM의 파일 시스템 : ISO9660

du
설명 : 사용자 자신의 디스크 사용 상황을 보고해 준다.(단위=Block)

cat [파일명]
설명 : 파일의 내용을 보거나 표준입력(키보드)으로 입력된 문자들을 파일로 저장할 때 쓰는 명령이다.

diff
설명 : diff(differential file comparator) 두개의 파일이 일치되도록 변경시키기 위한 정보를 제공해 줌.

rpm  [옵션] [파일명] <-- rpm명령어는 redhat 배포본 관련 패키지 명령어입니다. 
설명 : 패키지를 설치 및 업그레이드

옵션
-i, -U 설치 및 업그레이드 옵션
-e 패키지의 제거
-q 패키지 질의
-V 패키지 검증


만약 시스템에 설치되어 있는 패키지를 설치하려 한다면 -i 옵션을 -U 옵션을 써야한다.
만약 rpm -e rpm 명령을 실해하면 rpm 은 사라지기 때문에 절대로 하지 말아야 한다.
만약 지웠다면 www.rpm.org 에 가서 rpm 소스를 가져다 설치하는 수밖에 없다.

gzip [옵션] [파일명]
설명 : 리눅스에서 사용하는 압축 프로그램으로 속도 면에서나 압축률 면에서나 상당히 좋은 프로그램이다.

옵션
-d 압축을 해제하는 옵션
-f 압축을 하거나 해제할 때 같은 이름의 파일이 존재할 경우 덮어쓰기를 한다.
-l 압축파일의 정보를 보여 준다.
-r 압축 대상의 디렉토리까지 압축을 수행한다.


하나의 파일밖에 압축을 못한다.

tar [옵션] [파일명]
설명 : tar 명령어는 여러 파일을 하나로 묶는데 사용한다. tar는 파일을 압축하지 않지만 gzip와 같이 쓰면 매우 효과적이다.

옵션
c 새로운 tar파일의 생성
x 기존의 tar파일을 푸는데 사용
u 업데이트를 위한 옵션
t tar파일을 푸는 것이 아니라 내용을 보는 옵션
v 파일을 묶거나 풀때의 작업을 보여주는 옵션
z gzip를 이용해 tar.gz 혹은 .tgz로 묶인 파일을 풀 때 사용하는 옵션


more [-ncdflspu] [+줄번호] [파일이름(들)]
설명 : 한 화면씩 출력을 보여주는 유틸리티로 한 번에 전체적으로 볼수 없는 파일은 이것을 사용하여 스크롤을 제어할 수 있다.

옵션
-n 여기서 n은 숫자를 의미하며, 숫자는 출력 윈도우의 행수를 지정한다.
-c 위에서부터 한 행씩 지운 후 한 행씩 출력한다. 보통은 화면 전체를 지운후 각 행을 출력하기 시작한다. 특정한 터미널을 위해 사용
-d 스페이스나 q 키를 누르라는 프롬프트를 출력
-f 화명의 행이 아닌 논리적인 행 수를 계산한다. 보통은 긴 칼럼의 행은 화면에서 행바꿈을 하여 새로운 행으로 계산된다. -f 옵션을 사용하면 이러한 행은 계산하지 않는다.
-s 여러개의 빈 공백행은 하나로 취급한다.
-p 스크롤하지 않는다. 대신 화면을 지우고 출력한다.
-u 밑줄 치기를 금지 한다.


return 한줄만 스크롤
D 빈 페이지만 뒤로 이동
space 한 페이지만 뒤로 이동
B 한 페이지 앞으로 이동
H 도움말을 제공
V vi 에디터를 부름
Q 종료

touch [-amc] [MMDDhhmmYY] [파일명]
설명 : 파일의 액세스 시간이나 갱신 시간을 수정

옵션
-a 파일의 액세스 시간을 바꿈
-m 파일의 갱신 시간을 바꿈
-c 파일명이 존재하지 않는다면 새로운 파일을 만들지 않음
YY 연도
DD 날짜
hh 시간
mm 분


fdisk [-l] [-v] [-s partition] [device]
설명 : 디스크의 파티션을 변경한다.

옵션
-l 파티션 테이블의 목록을 출력
-v fdisk 버전 출력
-s partition DOS 파티션이 아니라면 해당 파티션의 크기를 출력
device device 에는 몇번째 하드디스크를 파티션 할것인지 알려주어야 한다. 아래는 리눅스에서 각각의 디바이스들에 대한 이름이다.


첫번째 설치된 하드 드라이브 : fdisk /dev/hda
두번째 설치된 하드 드라이브 : fdisk /dev/hdb
SCSI의 첫번째 하드 드라이브 : fdisk /dev/sda
SCSI의 두번째 하드 드라이브 : fdisk /dev/sdb

'm' 명령어로 도움말을 볼수 있다.

ps
설명 : 현재 자신의 리눅스 서버에서 어떤 프로세스들이 활동하고 있는지 살펴보고자 할떄 'ps' 명령을 사용하는 것이 일반적이다. ps 명령을 사용하면 현재 자신이 실행한 프로세스의 목록을 살펴볼수 있으며, '-aux' 옵션을 사용하면 시스템에서 동작중인 모든 프로세스를 살필수 있다.

사용키
<Space> 상황 즉시 갱신
<s> 갱신 시간 지정(초 단위)

CPU 사용률 기준으로 정렬
<M> 메모리 사용률 기준으로 정렬
<u> 지정한 사용자의 프로세스만 나타남
<k> 지정한 프로세스 kill
<h> 도움말


passwd [옵션] [계정]
설명 : 사용자 계정의 패스워드를 등록하거나 변경시키는 경우 이용되는 명령어이며 특히 슈퍼유저는 다른 유저의 패스워드도 변경할수 있다.

옵션
-l 사용자의 계정에 lock을 건다.
-d 사용자의 계정에 패스워드를 해체. 즉 패스워드 없이 로그인이 가능해 진다.


chmod [옵션] [파일명, 디렉토리]
설명 : 파일의 권한을 바꾸는 명령어

옵션
-R 서브디렉토리까지 모든 파일의 권한을 바꾼다.


chgrp [옵션]
설명 : 파일의 그룹을 바꾸는 명령어

옵션
-R 서브디렉토리까지 모든 파일의 그룹을 바꾼다.


chown [옵션] [파일명]
설명 : 파일의 소유자를 바꾸는 명령어

옵션
-R 서브디렉토리까지 모든 파일의 소유자를 바꾼다.


jobs
설명 : 현재 진행중인 작업들을 출력

옵션
-l 현재 작업하고 있는 디렉토리와 프로세스 그룹 ID를 출력


fg
설명 : 작업을 전명 작업으로 변환하는 것으로 전면 작업이란 모니터에 실행되는 모습을 사용자에 직접 보이며 작업하는 것을 말한다.

bg
설명 : 작업을 후면 작업으로 전화하는 것으로, 후면 작업이란 전면 작업과는 반대로 사용자의 눈에는 실행되는 모습을 보이지 않으면서도 실제로는 일을 하는 것을 말한다. 백그라운드 작업은 "명령어 &"로 명령어 다음에 "&" 표시를 붙여서 후면 작업으로 전환할 수 있도록 되어 있다.

date [yymmddhhmm [ss] ]
설명 : date는 위아 같이 주어진 인수가 없다면 현재 시스템의 시간과 날짜를 출력한다. 만약 주어지는 인자가 있다면 그에 따라서 시스템의 시간과 날짜를 변경한다.
yy는 연도를 나타내는 두 숫자이며, mm은 월을 나타낸다. 그리고 dd는 날짜, hh는 24시간 단위로 표현되는 시견이며, mm은 분을 의미한다. 끝의 ss는 초를 의마하는 부분으로 명시하지 않아도 상관없는 부분이다.


cal [-jy] [ [달] 연도]
설명 : 서기 원년부터 9999년까지의 달력을 볼 수 있다.
인수를 하나만 준다면 그 숫자는 연도를 의미하는 것으로 간주된다. 두 개의 숫자를 준다면 앞의 것을 월, 그 다음은 연도를 의미한다.


옵션
-j 1월 1일 부터 날짜 수를 계산하는 julian 날짜를 표시
-y 올해의 달력을 표시


kill [-signalID] PID
설명 : kill 명령은 프로세서를 죽이는 데에 사용된다. 그래서 이 유틸리티의 이름도 kill이 되었다.

옵션
-signalID 프로세서에게 보낼 시그널을 지정한다. 시그널은 번호로 지정될 도 있고 시그널 이름으로 지정될 수도 있다.
-l 시그널 종류를 나열한다. 시그널의 종류는 시그널 번호 순서대로 이름으로 나열된다.


finger [-slpm] [사용자]
설명 : 시스템 상의 사용자들에 대한 정보를 보여준다.
인수로 아무 것도 주어지지 않으면, finger는 현재 시스템에 로그인되어 있는 사용자들을 보여준다.


옵션
-s 사용자의 로그온 이름, 실제 이름, 터미널 이름, 로그온 시간 등등을 보여줌
-l -s 옵션 정보에 몇 가지를 추가하여, 여러 줄에 걸쳐서 보여줌
-p -l 옵션 정보에서 .plan과 .project 파일을 보이지 않는다.


su [-] [사용자ID][인수]
설명 : 다른 사용자 계정으로 서브 쉘을 생성하는 것으로, 잠시동안 다른 사용자 계정으로 작업할 필요가 있을때 사용한다.
많은 사람들이 su가 'super user'를 의미하는 말로 생각하지만, 사실은 'substitute user'를 의미하는 말이다.

옵션
- 하이픈(-)을 사용하면 새로운 쉘로 로그인할 때 자신의 로그인 과정을 수행한다. 옵션이 주어지지 않으면 새로운 쉘은 단지 쉘 역할을 수행할 뿐이다.


shutdown [옵션] 시간 [메세지]
설명 : 시스템을 종료할 때 일반적으로 사용되는 명령어

옵션
-t n t 옵션 뒤에 n초를 명시해서, 경고 메시지를 보낸후 n초 후에 kill 시그널을 보냄
-h shutdown시 halt를 실행
-r 시스템 종료를 완료하고 나서 다시 부팅 과정을 수행(리부팅)
-c 이미 예약되어 있는 shutdown을 취소
-k 모든 동작을 제대로 수행하지만 시스템을 종료할 시간이 되면 아무것도 하지 않음. ksms 'just kidding'의 의미
 


'Programming > Server' 카테고리의 다른 글

[FCM] 서버측 UnknownHostException  (0) 2018.10.01
[CentOS 7] systemd 기본 설정  (0) 2018.09.30
크롤링 robots.txt 주의점  (0) 2018.09.19
[Linux] lsof  (0) 2018.09.17
[Linux] 포트 확인  (0) 2018.09.17

우분투에 MariaDB를 처음 설치하면 캐릭터셋이 기본적으로 Latin-1 으로 되어 있는것을 볼 수 있습니다. (요즘 시대가 어떤 시대인데 Latin-1을 디폴트로...)


한글을 사용하기 위해서는 인코딩을 euc-kr이나 UTF8로 바꾸는 것이 필요한데, 요즘은 대부분 UTF8을 사용하므로 UTF8로 설정해 봅니다.


MariaDB의 캐릭터셋을 UTF8로 설정하는 것은 MySQL과 유사합니다.


먼저, 현재 MariaDB의 캐릭터셋이 무엇으로 되어 있는지 확인부터 해보죠. (이미 UTF8로 되어 있다면 바꿀 이유가 없으니까요.)


먼저 터미널로 접속합니다. 그리고 MariaDB에 연결합니다.


$ sudo mysql -u root -p                        <-- root는 MariaDB 유저명


비밀번호를 입력하고 접속 되면, MariaDB에 c로 시작하는 변수값이 어떻게 설정되었는지 확인합니다.


MariaDB [(none)]> show variables like 'c%';


제 경우 아래와 같이 나오네요.




utf8로 설정되어 있는 부분들도 있지만, latin1으로 설되어 있는 부분들도 보이는군요.


utf8로 바꾸어 봅시다.


(모두 utf8로 되어 있다면 바꿀 필요 없습니다.)


먼저 quit; 명령으로 MariaDB를 빠져 나옵니다.


MariaDB의 my.cnf 파일을 수정해야 하는데, 우분투의 경우, /etc/mysql/ 디렉터리 밑에 있습니다.


만약을 대비해 먼저 my.cnf 파일을 백업합니다.


$ sudo cp /etc/mysql/my.cnf /etc/mysql/my.cnf.ori


이제 본인에게 편한 에디터로 my.cnf 파일을 수정합니다.


아래 내용이 my.cnf에 있는지 확인하고 없으면 추가하고, 있으면 수정합니다.


(각 섹션별로 추가나 수정을 해 줍니다.)


[client]

.

.

.

default-character-set=utf8

.

.

.

[mysqld]

.

.

.

init_connect="SET collation_connection=utf8_general_ci"

init_connect="SET NAMES utf8"

character-set-server=utf8

collation-server=utf8_general_ci


skip-character-set-client-handshake

.

.

.

[mysql]

.

.

.

default-character-set=utf8

.

.

.


수정을 마쳤으면, MariaDB를 재시작합니다.


$ sudo service mysql restart


다시한번 MariaDB에 접속해서, 아래 명령어로 캐릭터셋이 바뀌었는지 확인합니다.


MariaDB [(none)]> show variables like 'c%';


이제 아래와 같이 나오네요.




정상적으로 utf8로 바뀐것을 확인 할 수 있습니다.




끝.


---------------------------------------------------------------

centos


/etc/my.cnf 파일에 아래 내용을 추가한 후 서버를 재시작해준다

[mysqld]

character_set_server=utf8

collation_server=utf8_general_ci

init_connect=set collation_connection=utf8_general_ci

init_connect=set names utf8

character-set-server=utf8

character-set-client-handshake = TRUE


리눅스에서 현재 열려 있는 포트를 확인하는 방법


열려 있는 모든 포트를 표시하기

netstat -nap

n:host명으로 표시 안함a:모든소켓 표시p:프로세스ID와 프로그램명 표시


LISTEN중인 포트를 표시하기

netstat -nap | grep LISTEN)



상대방 포트가 열려 있는지를 확인하는 방법

상대방 머신에 접속이 되지 않을 때 혹시 포트가 막혀 있는지를 확인해 보자.
netcat(nc) 네트워크 유틸리티를 이용하면 된다. 


특정 호스트의 특정 포트가 열려 있는지를 확인하기

nc -z 호스트주소 포트


ex) nc -z www.google.com 80


<결과예>

Connection to www.google.com 80 port [tcp/http] succeeded!

z: 포트 검색


특정 머신의 포트 범위를 지정하여 열린 포트를 확인하기

nc 호스트주소 -z 시작포트-끝포트


ex) nc 10.20.30.40 -z 19-21

<결과 예>

Connection to 10.20.30.40 21 port [tcp/ftp] succeeded!Connection to 10.20.30.40 22 port [tcp/ssh] succeeded!Connection to 10.20.30.40 23 port [tcp/telnet] succeeded!



포트를 열기

위의 방법으로 호스트의 포트가 LISTEN중임을 확인하였는데 상대방 호스트에서 포트가 열려있지 않다고 나온다면, 호스트의 포트가 막혀 있을 가능성이 있다.

포트를 열려면 iptables를 사용하면 된다. iptables는 리눅스 방화벽을 설정하는 명령어이다.

특정 포트를 외부에서 접속할 수 있도록 열기

iptables -I INPUT 1 -p tcp --dport 12345 -j ACCEPT 

I: 새로운 규칙을 추가한다.

p: 패킷의 프로토콜을 명시한다.

j: 규칙에 해당되는 패킷을 어떻게 처리할지를 정한다.

이 명령은 외부에서 들어오는(INBOUND) TCP포트 12345의 연결을 받아들인다는 규칙을 방화벽 1번 방화벽 규칙으로 추가한다는 의미이다.

이렇게 추가한 규칙은 조회나 삭제가 가능하다.


추가한 설정 조회하기

조회하기

iptables -L -v

L: 규칙을 출력

v: 자세히


추가한 설정 삭제하기

규칙을 삭제하려면 추가한 규칙의 번호로 삭제하는 방법과 추가했을 때의 명령어에서 "-I"를 "-D"로 바꾸어 주는 방법이 있다.

규칙번호로 삭제하기iptables -D INPUT 1

추가한 규칙으로 삭제하기

iptables -D INPUT -p tcp --dport 12345 -j ACCEPT 

D: 규칙을 삭제


'Programming > Server' 카테고리의 다른 글

[FCM] 서버측 UnknownHostException  (0) 2018.10.01
[CentOS 7] systemd 기본 설정  (0) 2018.09.30
크롤링 robots.txt 주의점  (0) 2018.09.19
[Linux] lsof  (0) 2018.09.17
리눅스 터미널 명령어 종류  (0) 2018.09.17

* 책, 인터넷 검색 등으로 확인한 내용을 적어두었습니다.

* 원 출처분들이 원하지 않을 시 수정하도록 하겠습니다.

* https://m.blog.naver.com/lifadviser/221276226054

* http://vlee.kr/1855



코스피 : 증권거래소에 상장된 기업 주식시장. - 대부분의 대기업이 여기 속함

코스닥 : 장외거래주식을 사고 파는 전자거래시스템 - 중소, 벤쳐기업 대상이 많다


시고저종 : 시가/고가/저가/종가


펀더멘털

PER

PBR

PCR

EV / EBITDA

EPS

BPS

EBITDA

현금DPS

현금배당수익률

회계기준


-------------------------------------------------------------------------------------------------------------



* 당기순이익(기업 가치분석 기준지표) = 높을수록 좋다

  - 기업이 일정 기간 동안 얻은 모든 수익에서 지출한 모든 비용을 공제하고 순수하게 남은 이익

  - 년간 순이익이 기업 시가총액의 10% 이상이면 좋음


* 부채비율(재무건전성을 판단하는 기준) = 낮을수록 좋다

  - 계산방법 : 부채비율= 부채/자본 x 100(%)

  - 예를 들면, 자산 150억원, 자본 50억원, 부채 100억원일 경우 부채비율은 200% (100억원/50억원 x 100%)

    즉, 자기돈(자본) 1원을 투입하고 남의 돈(부채) 2원을 투입하여 기업을 경영하고 있는 경우 임

  - 부채비율이 100% 이하인 경우에는 재무구조가 매우 우량한 기업임


* PER = 시가총액 / 당기순익

        = 주가 / 1주당 순이익 (EPS)

  - (Price Earnings Ratio : 주가수익률) = 낮을수록 좋다 

  - 종목의 상대적 수익 가치를 나타내주기 때문에 투자결정시 가장 우선적으로 봐야되는 비율 

  - 계산방법 : 주가/주당 순이익

  - 낮다 = 저평가 / 높다 = 고평가 (잡주에는 해당사항 없음)

  - 10 이하면 괜찮고 6~4 정도로 낮으면 낮을수록 좋다

  - 단! 이익을 내지 못하거나, 이익 변동성이 큰 경우에는 적정 주가수준을 계산하기 어렵다

=> 수익성 지표로 시총을 투자금이라고 한다면 몇년 뒤면 본전을 뽑을 수 있는가의 의미입니다. 적정주가를 구하는 가장 기본적인 지표로 널리 사용됩니다. 낮을수록 저평가되었다고 볼 수 있으며 일반적으로 8이하이면 저평가되었다고 할 수 있습니다.


# PER (주가 수익률, Price Earnings Ratio)는 대충 영어 단어가 주는 의미만 생각하면 주가(Price)와 이익(Earnings) 간의 비율이며 구체적으로 주가를 1주당 순이익으로 나눈 값이다. 여기서 1주당 순이익은 전체 이익을 주식 수로 나눈 값이다. 예를 들어 주가 1만원짜리 기업이 주당 1000원 순익을 거뒸다면 PER은 10이 된다. 따라서 PER이 낮으면 이익에 비해 주가가 저 평가된 종목인 셈이다. 시스템 트레이딩에서 저평가 종목을 검색할 때 유효하게 사용될 수 있는 지표이다.



* PBR = 시가총액 / 자본총액

        = 주가 / 1주당 순자산가치 (BPS)

  - (Price Book - value Ratio : 주가 순자산 비율) = 낮을수록 좋다

  - 회사 청산시 주주가 배당받을 수 있는 자산의 가치

  - 계산방법 : 주가/주당순자산 (순자산 = 자산 - 부채)

  - 수치가 낮으면 낮을수록 자산가치가 저평가되어 있다고 본다

  - PBR이 1 미만이면 주가가 장부상 순자산가치(청산가치)에도 못미친다는 의미 임

  - 단! 은행, 투자회사, 보험 등 자산이 많은 기업이나 

          엔터, 게임, 중소엔지니어링 회사 등 인적자원이 기업의 가치인 회사는 PBR로 회사의 가치를 판단하기 어렵다.

=> 안전성 지표로 시총과 회사의 자기자본의 비율로 회사의 청산가치를 의미하며 낮을수록 안전성이 좋다고 할 수 있습니다. 일반적으로 1이하이면 자산주라고 할 수 있습니다.


# PBR( 주가 순자산 비율, Price Book Ratio)는 주가(Price)와 자산(Book)간의 비율로 이해하면 되고 구체적으로는 주가를 1주당 순자산가치로 나눈 것이다. 1주당 순자산가치는 전체 자산을 주식 수로 나눈 값이다. PER은 이익을 창출하는 가치와 주식간의 비율이며 PBR은 보유하고 있는 가치와 주식간의 비율이다. PBR이 1미만이라면 기업 장부가치보다 주가가 낮다는 뜻이다. 그러나 PBR이 1미만인 기업을 덥석 매수해서는 안된다. 자산을 정확히 측정하기에는 어렵기 때문이다. 하지만 국내 퀀트의 최고 권위자인 서울대학교 컴퓨터공학부 문병로 교수에 따르면 한국에서는 PER보다는 PBR이 효과적이라고 한다. (나무위키 발췌)



* ROE = 당기순익 / 자본총액

        = PBR / PER

  - (Return On Equity : 자기자본이익률) = 높을수록 좋다

  - 투입한 자기자본으로 1년간 얼마만큼의 이익을 냈는지를 나타내는 수익성 지표

  - 계산방법 = 당기순이익/평균 자기자본 ×100

  - ROE 가 높다는 것은 당기순이익을 많이 내 효율적인 영업활동을 했다는 의미

  - ROE 가 회사채수익률보다 높으면 양호한 것으로 평가되며 최소한 정기예금 금리는 넘는 것이 좋다

=> 성장성 지표로 이 지표를 통해 주어진 자본으로 얼마나 효율적으로 수익을 창출하느냐를 알 수 있으며 높을수록 성장성이 우수하고 자본이 빨리 늘어난다고 볼 수 있습니다. 일반적으로 12% 이상이면 자본 효율이 우수하다고 할 수 있습니다.


# ROE(수익률, Return On Equity)는 자본을 이용해 얼마만큼의 이익을 냈는지를 나타낸다. 이왕이면 같은 자본을 이용해서 더 많은 이익을 내면 더 좋은 것이다. ROE 는 자본과 이익간의 비율(배율)이기에  PBR / PER 로 계산될 수 있다. 예를 들어 자본총액이 1억원인 회사가 천만원의 이익을 냈다면, ROE는 10(%)이 된다.

  브라운스톤은 ROE/PER > 3보다 클 경우 투자 가치가 있다고 했다. PER 지표 하나만 보기에는 미래 기대감으로 주가가 높게 형성될 수도 있기에 이를 견제하는 의미로 ROE를 연관시킨 것이라 이해할 수 있다. PER보다 최소 3배만큼 ROE도 커져야 한다는 의미이다. 가령 PER이 10이면 ROE는 30(%) 이상되어야 한다. PER이 높을수록 그에 대응하는만큼 수익률도 커져야 투자가치가 있다고 판단한 것이다. 왜 3일까는 일종의 통계자료에서 추정된 값이 아닐까 생각된다. 미국의 통계에 맞춘 자료이니 참조만하길 바란다.


-------------------------------------------------------------------------------


BPS(주당순자산) Book-value Per Share

순자산(자산-부채)을 발행 주식수로 나눈 값. ‘청산가치’라고도 불린다.

예시)

BPS는 회사의 자산 가치를 반영한 지표이므로 BPS가 클수록, 현재 주가와 격차가 적을수록 좋다.

실제)

다음은 2016년도 기준 카카오의 재무정보의 일부이다. 정말 단순하게 계산하면 아래와 같이 54,763원이 BPS값이 된다. 하지만, 실제 증권사이트에서 계산된 값을 보면 50,769원으로 나온다. 상세 계산에는 추가로 고려되어야 할 것이 있겠지만 대략 아래와 같다고 보면 된다.

즉, BPS가 현재 주가와 큰 차이가 없거나 높다면 해당 주가는 투자하기에 매우 좋은 가격이라고 할 수 있다.

PBR (주가순자산비율) Price Book-value Ratio

PBR은 현재 주가가 순자산에 비해 얼마의 비율을 갖는지를 나타내는 지표이다.

예시)

위와 같은 경우 주당순자산 대비 주가가 2.2 배 높은 주식이다. 일반적으로 PBR이 높은 주식은 상대적으로 가치대비 높은 주가를 가졌다고 볼 수 있다.


EPS(주당순이익) Earning Per Share

EPS는 기업이 벌어들인 수익을 발행주식수로 나눈 값이다. EPS가 높다는 것은 그 회사가 주당 이익율이 높다는 것으로 경영실적이 양호하여 투자 가치가 좋은 회사로 평가 할 수 있다.


PER(주가수익비율) Price Earning Ratio

PER은 현재 주가를 EPS로 나눈 값으로,  현재 주가가 순수익의 몇 배의 비율을 갖는지 나타내는 지표이다. PER이 높으면 현재 주가가 회사가 내는 이익보다 높은 평가를 받고 있는 것이다


ROE(자기자본이익률) Return On Equity


ROA(총자산이익율) Return On Assets

PBR은 1미만, PER은 낮은, ROE는 높은 종목이 우량


참고

http://soulgraphy.com/97

https://md2biz.tistory.com/318?category=713073

[도커 컨테이너간 네트워크를 잘 몰라서 생긴 삽질]


- 도커를 사용해서 레드마인 서버를 구축하면서 겪은 상황입니다.


- 아래와 같이 docker-compose 를 이용해 레드마인과 mariadb 를 구축했습니다.


* DB 포트인 3306 과 웹포트인 80, 8080 은 이미 사용중이어서 다른 포트로 매핑했습니다.

  여기서... 오해의 시작이...



version: '3'

services:
redmine_db:
image: mariadb
container_name: redmine_db
restart: always
volumes:
- local_directory/db:/var/lib/mysql
ports:
- 9096:3306
environment:
MYSQL_ROOT_PASSWORD: root_password
MYSQL_DATABASE: redmine
MYSQL_USER: user
MYSQL_PASSWORD: user_password
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
networks:
- default
- redmine_network

redmine_web:
image: redmine
container_name: redmine_web
restart: always
volumes:
- local_directory/themes:/usr/src/redmine/public/themes
- local_directory/plugins:/usr/src/redmine/plugins
- local_directory/files:/usr/src/redmine/files
ports:
- 9090:3000
links:
- redmine_db:mysql
environment:
REDMINE_DB_PORT: 9096
REDMINE_DB_MYSQL: redmine_db
REDMINE_DB_USERNAME: user
REDMINE_DB_PASSWORD: user_password
REDMINE_DB_DATABASE: redmine
REDMINE_DB_ENCODING: utf8
depends_on:
- redmine_db
networks:
- redmine_network

networks:
redmine_network:


- 위와 같이 구성한 뒤 컨테이너를 올렸는데 redmine_web 에서 계속 connection 관련 오류가 납니다.


- 도대체 뭘 잘못한거지... 계정도 제대로 만들어졌고 Heidisql 을 이용해서 host:9096 으로 접속도 제대로 되는걸 확인했지만


  레드마인은 계속 오류로 인해 재시작만 반복하네요.



[결국 원인을 찾음]


* 문제는 바로 이부분..



environment:
REDMINE_DB_PORT: 9096 // DB 컨테이너 3306 포트와 매핑된 호스트 서버 포트 / 틀렸다.. 3306 이 정답.
REDMINE_DB_MYSQL: redmine_db // DB 컨테이너 서비스명


- YAML 파일에 작성되는 항목들은 서비스 이름으로 컨테이너들간 연결이 가능하기 때문에 redmine_web 컨테이너에서


  redmine_db 컨테이너로 접근할 시 외부 호스트 포트 인 9096 포트 으로 접근할게 아니라 기본 3306 포트로 접속해야 됩니다.


 9096 포트는 아예 호스트 서버 외부에서 redmine_db 에 직접 접근할 때 사용됩니다.


- 이전 포스트에서는 기본 포트인 3306, 80, 8080 을 사용해서 몰랐는데.. 이걸 몰라서 이번에 삽질을 좀....







[안드로이드 AVD 에뮬레이터 관련]


- 안드로이드 개발 도중 에뮬레이터로 테스트해보려고 앱을 빌드하는데 제대로 진행이 안됨.



"Waiting for target device to come online"


위 상황일때....



[일반적인 해결법 몇가지]


1. SDK 툴에서 에뮬레이터 관련, USB 드라이버 를 체크 해제 -> 적용 -> 체크 -> 적용 해서 재설치


2. Invalidate cacjes / restart


3. AVD 에뮬레이터 목록에서 해당 에뮬레이터 wipe data


등등 검색하면 꽤 나옵니다.


[제가 해당했던 상황]


- 출처

https://stackoverflow.com/questions/42757928/waiting-for-target-device-to-come-online-in-android-studio-2-3#


Offical answer; > You can't run software that uses another virtualization technology at the same time that you run the accelerated emulator. For example, VirtualBox, VMWare, and Docker currently use a different virtualization technology, so you can't run them at the same time as the accelerated emulator. emulator-acceleration – volkan Apr 12 '17 at 4:53


* 즉 다른 에뮬레이터 또는 가상화 프로그램 (도커 등)이 실행 중 일때는 동시에 사용할 수 없다.

[docker 를 이용해 mysql + redmine 설치]


* docker-compose 사용


(docker-compose-redmine.yaml)



version: '2.1'

services:
redmine:
image: redmine
restart: always
container_name: redmine
ports:
- 3000:3000
environment:
REDMINE_DB_MYSQL: db
REDMINE_DB_PASSWORD: pass
REDMINE_DB_DATABASE: redmine
REDMINE_DB_ENCODING: utf8
depends_on:
db:
condition: service_healthy

db:
image: mysql
restart: always
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: pass
MYSQL_DATABASE: redmine
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci



$ docker-compose -f docker-compose-redmine.yaml up -d


위 상태로 실행하면 redmine 이 실행되었다가 계속 restart 를 반복합니다.


mysql 은 잘 실행되지만 redmine 이 실행 도중 오류가 발생하는 것으로 보이는데..


$ docker logs -f redmine


redmine 로그를 확인해보면 


' Authentication plugin 'caching_sha2_password' cannot be loaded '


위와 같은 오류를 확인할 수 있습니다.


검색 해 본 결과 mysql 버전에 따른 오류라고 하는데요...

(https://stackoverflow.com/questions/49979089/authentication-plugin-caching-sha2-password-cannot-be-loaded-in-circleci-mysql)


그래서 mysql 버전을 5.7 버전으로 지정해서 설치하니까 잘 됩니다.


image: mysql    ->   image: mysql:5.7




version: '2.1'

services:
redmine:
image: redmine
restart: always
container_name: redmine
ports:
- 3000:3000
environment:
REDMINE_DB_MYSQL: db
REDMINE_DB_PASSWORD: pass
REDMINE_DB_DATABASE: redmine
REDMINE_DB_ENCODING: utf8
depends_on:
db:
condition: service_healthy

db:
image: mysql:5.7
restart: always
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: pass
MYSQL_DATABASE: redmine
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci




[추가사항]


혹시나 해서 mysql 대신 mariadb 로 하니까 최신버전이어도 잘 되는듯 합니다.


image: mariadb


(mariadb 만세)


[주사위 던지기용 소스]


* Terrain 태그 = Ground, 큐브가 Ground 에 닿아있을 때만 클릭으로 큐브를 던질 수 있음

* 큐브 inspector 에서 position x,z 값 고정하여 다른 방향으로 움직이지 않고 오직 위아래로만 움직이게끔 만듬



using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class cubeMove : MonoBehaviour {

public int speed = 10;
public bool isJumpping = false;

private Rigidbody rb;
// Use this for initialization
void Start () {
rb = GetComponent<Rigidbody>();
    }
    
    // Update is called once per frame
    void Update () {
moveCube();
}

void moveCube()
{
if (!isJumpping)
{
if (Input.GetMouseButtonDown(0))
{
this.isJumpping = true;
transform.position = new Vector3(50,1,50);
transform.rotation = Quaternion.identity;
rb.AddForce(transform.up * 500);
rb.AddTorque(Random.Range(0,500), Random.Range(0, 500), Random.Range(0, 500));
this.GetComponent<Rigidbody>().velocity = Vector3.up * this.speed;
}
}
}


private void OnCollisionEnter(Collision collision)
{
if (collision.transform.tag == "Ground")
{
this.isJumpping = false;
}
}

}





+ Recent posts