<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>JH 개인 블로그</title>
    <link>https://jhdatabase.tistory.com/</link>
    <description>안녕하세요 JH입니다. 
Database를 포함한  IT 관련 다양한 주제로 포스팅하고 있습니다~부족한 실력이지만 조금이라도 도움이 되길 바라며..좋게 봐주셨으면 좋겠습니다 하하  </description>
    <language>ko</language>
    <pubDate>Sat, 6 Jun 2026 04:42:36 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>jeonghyun</managingEditor>
    <image>
      <title>JH 개인 블로그</title>
      <url>https://tistory1.daumcdn.net/tistory/5166640/attach/0087d2f7ade54cf48cfe098873d69955</url>
      <link>https://jhdatabase.tistory.com</link>
    </image>
    <item>
      <title>[MySQL &amp;amp; MariaDB - sync_binlog 0 vs 1 트랜잭션 보장 테스트]</title>
      <link>https://jhdatabase.tistory.com/entry/MySQL-MariaDB-syncbinlog-0-vs-1-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98-%EB%B3%B4%EC%9E%A5-%ED%85%8C%EC%8A%A4%ED%8A%B8</link>
      <description>&lt;h2 style=&quot;box-sizing: border-box; border-width: 1px 10px; border-bottom-style: solid; border-bottom-color: #000000; border-left-style: solid; border-left-color: #000000; letter-spacing: -1px; padding: 5px; margin: 5px 0px; line-height: 1;&quot; data-ke-size=&quot;size21&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;&amp;nbsp;배경&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전 글과 같이 갑작스런 Primary OS crash에 따른 Master-Slave 간 sync_binlog 파라미터의 값에 따라 데이터 정합성에 깨짐이 있는지 확인 해볼 생각입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sync_binlog 관련 내용은 이전 글 또는 docs를 참조해주세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://jhdatabase.tistory.com/entry/MySQL-MariaDB-Replication-%EB%B3%B5%EC%A0%9C-%EC%97%90%EB%9F%AC-errorcode-1236&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://jhdatabase.tistory.com/entry/MySQL-MariaDB-Replication-%EB%B3%B5%EC%A0%9C-%EC%97%90%EB%9F%AC-errorcode-1236&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1709116598596&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[MySQL &amp;amp; MariaDB - Replication 복제 에러 error_code : 1236]&quot; data-og-description=&quot;배경 최근 Replication 구조에서 Primary DB가 갑작스레 서버가 죽으며, DB가 내려갔다. 이후 Slave DB에서 replication이 에라 발생과 함께 정상적으로 동작하지 않았다. 발생 에러 ■ Slave status MariaDB [(none)]&amp;gt;&quot; data-og-host=&quot;jhdatabase.tistory.com&quot; data-og-source-url=&quot;https://jhdatabase.tistory.com/entry/MySQL-MariaDB-Replication-%EB%B3%B5%EC%A0%9C-%EC%97%90%EB%9F%AC-errorcode-1236&quot; data-og-url=&quot;https://jhdatabase.tistory.com/entry/MySQL-MariaDB-Replication-%EB%B3%B5%EC%A0%9C-%EC%97%90%EB%9F%AC-errorcode-1236&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dNvhnF/hyVqhrZMAr/s2XpSsBzLexToblMMxlESk/img.png?width=120&amp;amp;height=120&amp;amp;face=0_0_120_120,https://scrap.kakaocdn.net/dn/dTeJRf/hyVqm079ej/80SukBzXdvHpi5bYFFv6X1/img.png?width=120&amp;amp;height=120&amp;amp;face=0_0_120_120,https://scrap.kakaocdn.net/dn/bseJNh/hyVuoXhiJv/SfLtXB4l1wrd3nE7b3sunK/img.png?width=433&amp;amp;height=289&amp;amp;face=0_0_433_289&quot;&gt;&lt;a href=&quot;https://jhdatabase.tistory.com/entry/MySQL-MariaDB-Replication-%EB%B3%B5%EC%A0%9C-%EC%97%90%EB%9F%AC-errorcode-1236&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://jhdatabase.tistory.com/entry/MySQL-MariaDB-Replication-%EB%B3%B5%EC%A0%9C-%EC%97%90%EB%9F%AC-errorcode-1236&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dNvhnF/hyVqhrZMAr/s2XpSsBzLexToblMMxlESk/img.png?width=120&amp;amp;height=120&amp;amp;face=0_0_120_120,https://scrap.kakaocdn.net/dn/dTeJRf/hyVqm079ej/80SukBzXdvHpi5bYFFv6X1/img.png?width=120&amp;amp;height=120&amp;amp;face=0_0_120_120,https://scrap.kakaocdn.net/dn/bseJNh/hyVuoXhiJv/SfLtXB4l1wrd3nE7b3sunK/img.png?width=433&amp;amp;height=289&amp;amp;face=0_0_433_289');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[MySQL &amp;amp; MariaDB - Replication 복제 에러 error_code : 1236]&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;배경 최근 Replication 구조에서 Primary DB가 갑작스레 서버가 죽으며, DB가 내려갔다. 이후 Slave DB에서 replication이 에라 발생과 함께 정상적으로 동작하지 않았다. 발생 에러 ■ Slave status MariaDB [(none)]&amp;gt;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;jhdatabase.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1709108567065&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;MySQL :: MySQL 8.0 Reference Manual :: 19.1.6.4 Binary Logging Options and Variables&quot; data-og-description=&quot;19.1.6.4&amp;nbsp;Binary Logging Options and Variables You can use the mysqld options and system variables that are described in this section to affect the operation of the binary log as well as to control which statements are written to the binary log. For additi&quot; data-og-host=&quot;dev.mysql.com&quot; data-og-source-url=&quot;https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html&quot; data-og-url=&quot;https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;MySQL :: MySQL 8.0 Reference Manual :: 19.1.6.4 Binary Logging Options and Variables&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;19.1.6.4&amp;nbsp;Binary Logging Options and Variables You can use the mysqld options and system variables that are described in this section to affect the operation of the binary log as well as to control which statements are written to the binary log. For additi&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;dev.mysql.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;box-sizing: border-box; border-width: 1px 10px; border-bottom-style: solid; border-bottom-color: #000000; border-left-style: solid; border-left-color: #000000; letter-spacing: -1px; padding: 5px; margin: 5px 0px; line-height: 1;&quot; data-ke-size=&quot;size21&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;&amp;nbsp;사전 확인&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1709108590616&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;Master&amp;gt;
MariaDB [(none)]&amp;gt; show master status\G;
*************************** 1. row ***************************
            File: mysql.000001
        Position: 324
    Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.000 sec)


&amp;lt;Slave&amp;gt;
MariaDB [(none)]&amp;gt; show slave status\G;
*************************** 1. row ***************************
                Slave_IO_State: Waiting for master to send event
                   Master_Host: 192.168.152.128
                   Master_User: repl
                   Master_Port: 3306
                 Connect_Retry: 10
               Master_Log_File: mysql.000001
           Read_Master_Log_Pos: 324
                Relay_Log_File: mysql-relay-bin.000002
                 Relay_Log_Pos: 551
         Relay_Master_Log_File: mysql.000001
              Slave_IO_Running: Yes
             Slave_SQL_Running: Yes
               Replicate_Do_DB:
           Replicate_Ignore_DB:
            Replicate_Do_Table:
        Replicate_Ignore_Table:
       Replicate_Wild_Do_Table:
   Replicate_Wild_Ignore_Table:
                    Last_Errno: 0
                    Last_Error:
                  Skip_Counter: 0
           Exec_Master_Log_Pos: 324
               Relay_Log_Space: 860
               Until_Condition: None
                Until_Log_File:
                 Until_Log_Pos: 0
            Master_SSL_Allowed: No
            Master_SSL_CA_File:
            Master_SSL_CA_Path:
               Master_SSL_Cert:
             Master_SSL_Cipher:
                Master_SSL_Key:
         Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                 Last_IO_Errno: 0
                 Last_IO_Error:
                Last_SQL_Errno: 0
                Last_SQL_Error:
   Replicate_Ignore_Server_Ids:
              Master_Server_Id: 1
                Master_SSL_Crl:
            Master_SSL_Crlpath:
                    Using_Gtid: No
                   Gtid_IO_Pos:
       Replicate_Do_Domain_Ids:
   Replicate_Ignore_Domain_Ids:
                 Parallel_Mode: conservative
                     SQL_Delay: 0
           SQL_Remaining_Delay: NULL
       Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
              Slave_DDL_Groups: 0
Slave_Non_Transactional_Groups: 0
    Slave_Transactional_Groups: 0
1 row in set (0.001 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;box-sizing: border-box; border-width: 1px 10px; border-bottom-style: solid; border-bottom-color: #000000; border-left-style: solid; border-left-color: #000000; letter-spacing: -1px; padding: 5px; margin: 5px 0px; line-height: 1;&quot; data-ke-size=&quot;size21&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;&amp;nbsp;테스트 시작&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;&amp;lt;Sync_binlog&amp;gt; =0 일 시&lt;/b&gt;&lt;/blockquote&gt;
&lt;pre id=&quot;code_1709108638276&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;MariaDB [(none)]&amp;gt; show variables like 'sync_binlog';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| sync_binlog   | 0     |
+---------------+-------+
1 row in set (0.002 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;ㅁ Master에 데이터 insert 중 OS 종료&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1709108669675&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ sh +x kim.sh
...
Inserted value: 3274
Inserted value: 3275
Inserted value: 3276
Inserted value: 3277
Inserted value: 3278
Inserted value: 3279
Inserted value: 3280
Inserted value: 3281
Inserted value: 3282
Inserted value: 3283
Inserted value: 3284
Inserted value: 3285
Inserted value: 3286
Inserted value: 3287
Inserted value: 3288
Inserted value: 3289
Inserted value: 3290
-- OS 중단&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;ㅁ Slave status&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1709108685183&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;MariaDB [(none)]&amp;gt; show slave status\G;
*************************** 1. row ***************************
                Slave_IO_State:
                   Master_Host: 192.168.152.128
                   Master_User: repl
                   Master_Port: 3306
                 Connect_Retry: 10
               Master_Log_File: mysql.000001
           Read_Master_Log_Pos: 568519
                Relay_Log_File: mysql-relay-bin.000002
                 Relay_Log_Pos: 568746
         Relay_Master_Log_File: mysql.000001
              Slave_IO_Running: No
             Slave_SQL_Running: Yes
               Replicate_Do_DB:
           Replicate_Ignore_DB:
            Replicate_Do_Table:
        Replicate_Ignore_Table:
       Replicate_Wild_Do_Table:
   Replicate_Wild_Ignore_Table:
                    Last_Errno: 0
                    Last_Error:
                  Skip_Counter: 0
           Exec_Master_Log_Pos: 568519
               Relay_Log_Space: 569055
               Until_Condition: None
                Until_Log_File:
                 Until_Log_Pos: 0
            Master_SSL_Allowed: No
            Master_SSL_CA_File:
            Master_SSL_CA_Path:
               Master_SSL_Cert:
             Master_SSL_Cipher:
                Master_SSL_Key:
         Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
                 Last_IO_Errno: 1236
                 Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Client requested master to start replication from impossible position; the first event 'mysql.000001' at 568519, the last event read from 'mysql.000001' at 4, the last byte read from 'mysql.000001' at 4.'
                Last_SQL_Errno: 0
                Last_SQL_Error:
   Replicate_Ignore_Server_Ids:
              Master_Server_Id: 1
                Master_SSL_Crl:
            Master_SSL_Crlpath:
                    Using_Gtid: No
                   Gtid_IO_Pos:
       Replicate_Do_Domain_Ids:
   Replicate_Ignore_Domain_Ids:
                 Parallel_Mode: conservative
                     SQL_Delay: 0
           SQL_Remaining_Delay: NULL
       Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
              Slave_DDL_Groups: 1
Slave_Non_Transactional_Groups: 0
    Slave_Transactional_Groups: 3290
1 row in set (0.000 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;ㅁ Next Binlog 파일로 change master&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1709108703496&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;MariaDB [(none)]&amp;gt; stop slave;
Query OK, 0 rows affected (0.002 sec)


MariaDB [(none)]&amp;gt; CHANGE MASTER TO MASTER_HOST='192.168.152.128', MASTER_USER='repl',MASTER_PASSWORD='repl',MASTER_PORT=3306,MASTER_LOG_FILE='mysql.000002', MASTER_LOG_POS=0,MASTER_CONNECT_RETRY=10;
Query OK, 0 rows affected (0.005 sec)


MariaDB [(none)]&amp;gt; start slave;
Query OK, 0 rows affected (0.001 sec)


MariaDB [(none)]&amp;gt; show slave status\G;
*************************** 1. row ***************************
                Slave_IO_State: Waiting for master to send event
                   Master_Host: 192.168.152.128
                   Master_User: repl
                   Master_Port: 3306
                 Connect_Retry: 10
               Master_Log_File: mysql.000002
           Read_Master_Log_Pos: 338
                Relay_Log_File: mysql-relay-bin.000002
                 Relay_Log_Pos: 633
         Relay_Master_Log_File: mysql.000002
              Slave_IO_Running: Yes
             Slave_SQL_Running: Yes
               Replicate_Do_DB:
           Replicate_Ignore_DB:
            Replicate_Do_Table:
        Replicate_Ignore_Table:
       Replicate_Wild_Do_Table:
   Replicate_Wild_Ignore_Table:
                    Last_Errno: 0
                    Last_Error:
                  Skip_Counter: 0
           Exec_Master_Log_Pos: 338
               Relay_Log_Space: 942
               Until_Condition: None
                Until_Log_File:
                 Until_Log_Pos: 0
            Master_SSL_Allowed: No
            Master_SSL_CA_File:
            Master_SSL_CA_Path:
               Master_SSL_Cert:
             Master_SSL_Cipher:
                Master_SSL_Key:
         Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                 Last_IO_Errno: 0
                 Last_IO_Error:
                Last_SQL_Errno: 0
                Last_SQL_Error:
   Replicate_Ignore_Server_Ids:
              Master_Server_Id: 1
                Master_SSL_Crl:
            Master_SSL_Crlpath:
                    Using_Gtid: No
                   Gtid_IO_Pos:
       Replicate_Do_Domain_Ids:
   Replicate_Ignore_Domain_Ids:
                 Parallel_Mode: conservative
                     SQL_Delay: 0
           SQL_Remaining_Delay: NULL
       Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
              Slave_DDL_Groups: 1
Slave_Non_Transactional_Groups: 0
    Slave_Transactional_Groups: 3290
1 row in set (0.000 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;&lt;b&gt;ㅁ 정합성 비교&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;오히려 Slave가 더 많다.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;Master에는 disk에 unflushed된 바이너리로그 데이터는 사라지고, Slave는 Master의 메모리의 바이너리 로그까지 반영하였기 때문이다.&lt;/div&gt;
&lt;pre id=&quot;code_1709108731233&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;Master&amp;gt;
MariaDB [test]&amp;gt; select count(*) from kim;
+----------+
| count(*) |
+----------+
|     3289 |
+----------+
1 row in set (0.003 sec)


&amp;lt;Slave&amp;gt;
MariaDB [test]&amp;gt; select count(*) from kim;
+----------+
| count(*) |
+----------+
|     3290 |
+----------+
1 row in set (0.003 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-client=&quot;ca-pub-7660187941099202&quot; data-ad-slot=&quot;9969021604&quot; data-ad-format=&quot;auto&quot; data-full-width-responsive=&quot;true&quot;&gt;&lt;/ins&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt; &amp;lt;Sync_binlog&amp;gt; =1 일 시 &lt;/b&gt;&lt;/blockquote&gt;
&lt;pre id=&quot;code_1709108893636&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;MariaDB [(none)]&amp;gt; show variables like 'sync_binlog';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| sync_binlog   | 1     |
+---------------+-------+
1 row in set (0.002 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;ㅁ Master에 데이터 insert 중 OS 종료&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1709109016267&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ sh +x kim.sh
...
Inserted value: 2055
Inserted value: 2056
Inserted value: 2057
Inserted value: 2058
Inserted value: 2059
Inserted value: 2060
Inserted value: 2061
Inserted value: 2062
Inserted value: 2063
Inserted value: 2064
Inserted value: 2065
Inserted value: 2066
Inserted value: 2067
-- OS 중단&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;ㅁ&amp;nbsp;&lt;/span&gt;&lt;span&gt;Master 기동 이후 특별한 조치 없이 replication 정상 확인&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1709109173751&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;MariaDB [test]&amp;gt; show slave status\G;
*************************** 1. row ***************************
                Slave_IO_State: Waiting for master to send event
                   Master_Host: 192.168.152.128
                   Master_User: repl
                   Master_Port: 3306
                 Connect_Retry: 10
               Master_Log_File: mysql.000004
           Read_Master_Log_Pos: 338
                Relay_Log_File: mysql-relay-bin.000006
                 Relay_Log_Pos: 633
         Relay_Master_Log_File: mysql.000004
              Slave_IO_Running: Yes
             Slave_SQL_Running: Yes
               Replicate_Do_DB:
           Replicate_Ignore_DB:
            Replicate_Do_Table:
        Replicate_Ignore_Table:
       Replicate_Wild_Do_Table:
   Replicate_Wild_Ignore_Table:
                    Last_Errno: 0
                    Last_Error:
                  Skip_Counter: 0
           Exec_Master_Log_Pos: 338
               Relay_Log_Space: 1237
               Until_Condition: None
                Until_Log_File:
                 Until_Log_Pos: 0
            Master_SSL_Allowed: No
            Master_SSL_CA_File:
            Master_SSL_CA_Path:
               Master_SSL_Cert:
             Master_SSL_Cipher:
                Master_SSL_Key:
         Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                 Last_IO_Errno: 0
                 Last_IO_Error:
                Last_SQL_Errno: 0
                Last_SQL_Error:
   Replicate_Ignore_Server_Ids:
              Master_Server_Id: 1
                Master_SSL_Crl:
            Master_SSL_Crlpath:
                    Using_Gtid: No
                   Gtid_IO_Pos:
       Replicate_Do_Domain_Ids:
   Replicate_Ignore_Domain_Ids:
                 Parallel_Mode: conservative
                     SQL_Delay: 0
           SQL_Remaining_Delay: NULL
       Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
              Slave_DDL_Groups: 1
Slave_Non_Transactional_Groups: 0
    Slave_Transactional_Groups: 6911
1 row in set (0.000 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;ㅁ 정합성 비교&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;트랜잭션을 보장해주기 때문에 동일하다&lt;/div&gt;
&lt;pre id=&quot;code_1709109207154&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;Master&amp;gt;
MariaDB [test]&amp;gt; select count(*) from kim;
+----------+
| count(*) |
+----------+
|     2067 |
+----------+
1 row in set (0.002 sec)


&amp;lt;Slave&amp;gt;
MariaDB [test]&amp;gt; select count(*) from kim;
+----------+
| count(*) |
+----------+
|     2067 |
+----------+
1 row in set (0.002 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>DataBase/MySQL &amp;amp; MariaDB</category>
      <author>jeonghyun</author>
      <guid isPermaLink="true">https://jhdatabase.tistory.com/200</guid>
      <comments>https://jhdatabase.tistory.com/entry/MySQL-MariaDB-syncbinlog-0-vs-1-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98-%EB%B3%B4%EC%9E%A5-%ED%85%8C%EC%8A%A4%ED%8A%B8#entry200comment</comments>
      <pubDate>Wed, 28 Feb 2024 19:34:28 +0900</pubDate>
    </item>
    <item>
      <title>[MySQL &amp;amp; MariaDB - Replication 복제 에러 error_code : 1236]</title>
      <link>https://jhdatabase.tistory.com/entry/MySQL-MariaDB-Replication-%EB%B3%B5%EC%A0%9C-%EC%97%90%EB%9F%AC-errorcode-1236</link>
      <description>&lt;h2 style=&quot;box-sizing: border-box; border-width: 1px 10px; border-bottom-style: solid; border-bottom-color: #000000; border-left-style: solid; border-left-color: #000000; letter-spacing: -1px; padding: 5px; margin: 5px 0px; line-height: 1;&quot; data-ke-size=&quot;size21&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;&amp;nbsp;배경&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최근 Replication 구조에서 Primary DB가 갑작스레 서버가 죽으며, DB가 내려갔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 Slave DB에서 replication이 에라 발생과 함께 정상적으로 동작하지 않았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;box-sizing: border-box; border-width: 1px 10px; border-bottom-style: solid; border-bottom-color: #000000; border-left-style: solid; border-left-color: #000000; letter-spacing: -1px; padding: 5px; margin: 5px 0px; line-height: 1;&quot; data-ke-size=&quot;size21&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;&amp;nbsp;발생 에러&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;■&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt; &lt;/span&gt;&lt;b&gt;Slave status&lt;/b&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1709107310237&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;MariaDB [(none)]&amp;gt; show slave status\G;
*************************** 1. row ***************************
                Slave_IO_State:
                   Master_Host: 192.168.152.128
                   Master_User: repl
                   Master_Port: 3306
                 Connect_Retry: 10
               Master_Log_File: mysql.000001
           Read_Master_Log_Pos: 568519
                Relay_Log_File: mysql-relay-bin.000002
                 Relay_Log_Pos: 568746
         Relay_Master_Log_File: mysql.000001
              Slave_IO_Running: No
             Slave_SQL_Running: Yes
               Replicate_Do_DB:
           Replicate_Ignore_DB:
            Replicate_Do_Table:
        Replicate_Ignore_Table:
       Replicate_Wild_Do_Table:
   Replicate_Wild_Ignore_Table:
                    Last_Errno: 0
                    Last_Error:
                  Skip_Counter: 0
           Exec_Master_Log_Pos: 568519
               Relay_Log_Space: 569055
               Until_Condition: None
                Until_Log_File:
                 Until_Log_Pos: 0
            Master_SSL_Allowed: No
            Master_SSL_CA_File:
            Master_SSL_CA_Path:
               Master_SSL_Cert:
             Master_SSL_Cipher:
                Master_SSL_Key:
         Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
                 Last_IO_Errno: 1236
                 Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Client requested master to start replication from impossible position; the first event 'mysql.000001' at 568519, the last event read from 'mysql.000001' at 4, the last byte read from 'mysql.000001' at 4.'
                Last_SQL_Errno: 0
                Last_SQL_Error:
   Replicate_Ignore_Server_Ids:
              Master_Server_Id: 1
                Master_SSL_Crl:
            Master_SSL_Crlpath:
                    Using_Gtid: No
                   Gtid_IO_Pos:
       Replicate_Do_Domain_Ids:
   Replicate_Ignore_Domain_Ids:
                 Parallel_Mode: conservative
                     SQL_Delay: 0
           SQL_Remaining_Delay: NULL
       Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
              Slave_DDL_Groups: 1
Slave_Non_Transactional_Groups: 0
    Slave_Transactional_Groups: 3290
1 row in set (0.000 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Slave에서 읽은 binlog의 pos값 568519이 Master에 저장된 동일한 binlog파일의 last pos값 568149보다 높은현상이 발생했다..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;box-sizing: border-box; border-width: 1px 10px; border-bottom-style: solid; border-bottom-color: #000000; border-left-style: solid; border-left-color: #000000; letter-spacing: -1px; padding: 5px; margin: 5px 0px; line-height: 1;&quot; data-ke-size=&quot;size21&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;&amp;nbsp;발생 원인&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;에러 메시지와 동일하게 Slave에서는 Master의 다음 binlog 파일 pos값을 찾지 못해 에러가 발생.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 sync_binlog 파라미터가 0으로 설정되면 trx commit시에 바이너리 로그는 disk로 sync되지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 Primary crash시점에 unflushed상태의 바이너리 로그 데이터는 사라지게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;binary log가 linux 서버의 cached IO를 하기 때문에 unflushed 상태의 데이터를 Slave에서는 읽을수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 Master의 memory 상에서 page cache형태로 flush되지 않는 상태로 서비스 되기 때문에 Slave 서버에서 동기화 된&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pos값이 Master 서버에 동일 binlog 파일의 last pos값보다 높은 현상 발생한 것 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;■ Sync_binlog&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;433&quot; data-origin-height=&quot;289&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kHXB7/btsFlTHpfh7/E6Nk7jIU5erTkFx36BAWkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kHXB7/btsFlTHpfh7/E6Nk7jIU5erTkFx36BAWkk/img.png&quot; data-alt=&quot;sync_binlog파라미터&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kHXB7/btsFlTHpfh7/E6Nk7jIU5erTkFx36BAWkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkHXB7%2FbtsFlTHpfh7%2FE6Nk7jIU5erTkFx36BAWkk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;433&quot; height=&quot;289&quot; data-origin-width=&quot;433&quot; data-origin-height=&quot;289&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;sync_binlog파라미터&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #555555; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;MySQL 서버가 바이너리 로그를 디스크에 동기화하는 빈도를 제어합니다.&lt;/p&gt;
&lt;div style=&quot;background-color: #ffffff; color: #555555; text-align: left;&quot;&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: square;&quot;&gt;&lt;a style=&quot;color: #0074a3;&quot; href=&quot;https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html#sysvar_sync_binlog&quot;&gt;sync_binlog=0&lt;/a&gt;: MySQL 서버에 의한 바이너리 로그의 디스크 동기화를 비활성화합니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;대신, MySQL 서버는 다른 파일과 마찬가지로 때때로 운영 체제를 사용하여 바이너리 로그를 디스크에 플러시합니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;이 설정은 최상의 성능을 제공하지만 정전이나 운영 체제 충돌이 발생하는 경우 서버가 바이너리 로그에 동기화되지 않은 트랜잭션을 커밋했을 수 있습니다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: square;&quot;&gt;&lt;a style=&quot;color: #0074a3;&quot; href=&quot;https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html#sysvar_sync_binlog&quot;&gt;sync_binlog=1&lt;/a&gt;: 트랜잭션이 커밋되기 전에 바이너리 로그를 디스크에 동기화할 수 있습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;이는 가장 안전한 설정이지만 디스크 쓰기 횟수가 늘어나 성능에 부정적인 영향을 미칠 수 있습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;정전이나 운영 체제 충돌이 발생하는 경우 바이너리 로그에서 누락된 트랜잭션은 준비된 상태에만 있습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;이를 통해 자동 복구 루틴이 트랜잭션을 롤백할 수 있으므로 바이너리 로그에서 트랜잭션이 손실되지 않는 것이 보장됩니다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: square;&quot;&gt;&lt;a style=&quot;color: #0074a3;&quot; href=&quot;https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html#sysvar_sync_binlog&quot;&gt;sync_binlog=N&lt;/a&gt;, 여기서 는&lt;span&gt;&amp;nbsp;&lt;/span&gt;N0 또는 1 이외의 값: 바이너리&lt;span&gt;&amp;nbsp;&lt;/span&gt;N로그 커밋 그룹이 수집된 후 바이너리 로그가 디스크에 동기화됩니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;정전이나 운영 체제 충돌이 발생하는 경우 서버에서 바이너리 로그에 기록되지 않은 트랜잭션을 커밋했을 수 있습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;이 설정은 디스크 쓰기 횟수 증가로 인해 성능에 부정적인 영향을 미칠 수 있습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;값이 높을수록 성능이 향상되지만 데이터 손실 위험이 높아집니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;&lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-client=&quot;ca-pub-7660187941099202&quot; data-ad-slot=&quot;9969021604&quot; data-ad-format=&quot;auto&quot; data-full-width-responsive=&quot;true&quot;&gt;&lt;/ins&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;box-sizing: border-box; border-width: 1px 10px; border-bottom-style: solid; border-bottom-color: #000000; border-left-style: solid; border-left-color: #000000; letter-spacing: -1px; padding: 5px; margin: 5px 0px; line-height: 1;&quot; data-ke-size=&quot;size21&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;&amp;nbsp;해결 방법&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Master-Slave간 데이터 정합성을 위해 Slave를 재구성하는게 일반적입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 아래와 같이 docs에서는 해결방법을 알려주나 이는 데이터 정합성을 보장하지 못하는 해결방법이므로 반드시 정합성 검사를 진행해보는 것을 추천드립니다.(sync_binlog값이 0인 경우)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://mariadb.com/resources/blog/client-requested-master-to-start-replication-from-impossible-position/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://mariadb.com/resources/blog/client-requested-master-to-start-replication-from-impossible-position/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1709108202000&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Client requested master to start replication from impossible position | MariaDB&quot; data-og-description=&quot;If you run a replicated MySQL setup and have a master failure, you may see the following error in your error log. At this point your slave will not be replicating and you will need to recover from the&amp;hellip;&quot; data-og-host=&quot;mariadb.com&quot; data-og-source-url=&quot;https://mariadb.com/resources/blog/client-requested-master-to-start-replication-from-impossible-position/&quot; data-og-url=&quot;https://mariadb.com/resources/blog/client-requested-master-to-start-replication-from-impossible-position/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/hITF2/hyVumd4B8G/ZjOYFyREKQIrPuRqm2HnFk/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/b6ir6O/hyVqhrYjFU/xkPxTGff61yAp9v1gDdNOk/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://mariadb.com/resources/blog/client-requested-master-to-start-replication-from-impossible-position/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://mariadb.com/resources/blog/client-requested-master-to-start-replication-from-impossible-position/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/hITF2/hyVumd4B8G/ZjOYFyREKQIrPuRqm2HnFk/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/b6ir6O/hyVqhrYjFU/xkPxTGff61yAp9v1gDdNOk/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Client requested master to start replication from impossible position | MariaDB&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;If you run a replicated MySQL setup and have a master failure, you may see the following error in your error log. At this point your slave will not be replicating and you will need to recover from the&amp;hellip;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;mariadb.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;ㅁ&amp;nbsp; Replication 재정의&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;- &lt;span&gt;&lt;span&gt;현재 읽고 있는 Binlog파일의 다음 파일로 지정. 즉, 현재 mysql.00001을 읽고 있으므로 mysql.00002로 지정해줍니다. 또한&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;새로운 binlog파일의 첫 시작 position번호는 4로 시작합니다. 따라서 change master시 0또는 4로 지정하여 복제를 재시작합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1709108035813&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;MariaDB [(none)]&amp;gt; stop slave;
Query OK, 0 rows affected (0.002 sec)


MariaDB [(none)]&amp;gt; CHANGE MASTER TO MASTER_HOST='192.168.152.128', MASTER_USER='repl',MASTER_PASSWORD='repl',MASTER_PORT=3306,MASTER_LOG_FILE='mysql.000002', MASTER_LOG_POS=0,MASTER_CONNECT_RETRY=10;
Query OK, 0 rows affected (0.005 sec)


MariaDB [(none)]&amp;gt; start slave;
Query OK, 0 rows affected (0.001 sec)


MariaDB [(none)]&amp;gt; show slave status\G;
*************************** 1. row ***************************
                Slave_IO_State: Waiting for master to send event
                   Master_Host: 192.168.152.128
                   Master_User: repl
                   Master_Port: 3306
                 Connect_Retry: 10
               Master_Log_File: mysql.000002
           Read_Master_Log_Pos: 338
                Relay_Log_File: mysql-relay-bin.000002
                 Relay_Log_Pos: 633
         Relay_Master_Log_File: mysql.000002
              Slave_IO_Running: Yes
             Slave_SQL_Running: Yes
               Replicate_Do_DB:
           Replicate_Ignore_DB:
            Replicate_Do_Table:
        Replicate_Ignore_Table:
       Replicate_Wild_Do_Table:
   Replicate_Wild_Ignore_Table:
                    Last_Errno: 0
                    Last_Error:
                  Skip_Counter: 0
           Exec_Master_Log_Pos: 338
               Relay_Log_Space: 942
               Until_Condition: None
                Until_Log_File:
                 Until_Log_Pos: 0
            Master_SSL_Allowed: No
            Master_SSL_CA_File:
            Master_SSL_CA_Path:
               Master_SSL_Cert:
             Master_SSL_Cipher:
                Master_SSL_Key:
         Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                 Last_IO_Errno: 0
                 Last_IO_Error:
                Last_SQL_Errno: 0
                Last_SQL_Error:
   Replicate_Ignore_Server_Ids:
              Master_Server_Id: 1
                Master_SSL_Crl:
            Master_SSL_Crlpath:
                    Using_Gtid: No
                   Gtid_IO_Pos:
       Replicate_Do_Domain_Ids:
   Replicate_Ignore_Domain_Ids:
                 Parallel_Mode: conservative
                     SQL_Delay: 0
           SQL_Remaining_Delay: NULL
       Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
              Slave_DDL_Groups: 1
Slave_Non_Transactional_Groups: 0
    Slave_Transactional_Groups: 3290
1 row in set (0.000 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 글에서 sync_binlog 0 또는 1값에 따른 데이터 정합성 유지 테스트를 진행하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>DataBase/MySQL &amp;amp; MariaDB</category>
      <author>jeonghyun</author>
      <guid isPermaLink="true">https://jhdatabase.tistory.com/199</guid>
      <comments>https://jhdatabase.tistory.com/entry/MySQL-MariaDB-Replication-%EB%B3%B5%EC%A0%9C-%EC%97%90%EB%9F%AC-errorcode-1236#entry199comment</comments>
      <pubDate>Wed, 28 Feb 2024 19:19:28 +0900</pubDate>
    </item>
    <item>
      <title>[MySQL &amp;amp; MariaDB - Federated Engine 사용 테스트]</title>
      <link>https://jhdatabase.tistory.com/entry/MySQL-MariaDB-Federated-Engine-%EC%82%AC%EC%9A%A9-%ED%85%8C%EC%8A%A4%ED%8A%B8</link>
      <description>&lt;h2 style=&quot;box-sizing: border-box; border-width: 1px 10px; border-bottom-style: solid; border-bottom-color: #000000; border-left-style: solid; border-left-color: #000000; letter-spacing: -1px; padding: 5px; margin: 5px 0px; line-height: 1;&quot; data-ke-size=&quot;size21&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/span&gt; &lt;span&gt;&lt;span&gt;Federated engine이란&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;div&gt;FEDERATED 스토리지 엔진을 사용하면 복제 또는 클러스터 기술을 사용하지 않고도 원격 MySQL 데이터베이스의 데이터에 액세스 할 수 있습니다. 로컬 FEDERATED 테이블을 쿼리하면 원격 테이블에서 데이터를 자동으로 가져옵니다. 로컬 테이블에는 데이터가 저장되지 않습니다.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;표준 스토리지 엔진 (예 : MyISAM, CSV 또는 InnoDB) 중 하나를 사용하여 테이블을 생성할 때 테이블은 테이블 정의 및 관련 데이터로 구성됩니다. FEDERATED 테이블을 생성할 때 테이블 정의는 동일하지만 데이터의 물리적 스토리지는 원격 서버에서 처리됩니다.&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;FEDERATED 스토리지 엔진은 더 이상 지원되지 않는 레거시 스토리지 엔진입니다.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;MariaDB 10.0 부터 CONNECT 스토리지 엔진 은 MySQL 또는 ODBC 연결(테이블 유형: MYSQL , ODBC ) 을 통해 원격 데이터베이스에 액세스하는 것도 허용&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;box-sizing: border-box; border-width: 1px 10px; border-bottom-style: solid; border-bottom-color: #000000; border-left-style: solid; border-left-color: #000000; letter-spacing: -1px; padding: 5px; margin: 5px 0px; line-height: 1;&quot; data-ke-size=&quot;size21&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;&amp;nbsp;단점 및 제약사항&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;div&gt;FEDERATED 테이블은 일반적인 의미에서 인덱스를 지원하지 않습니다. 테이블 데이터에 대한 액세스는 원격으로 처리되기 때문에 실제로 인덱스를 사용하는 원격 테이블입니다. 즉, 인덱스를 사용할 수 없어 전체 테이블 스캔이 필요한 쿼리의 경우 서버가 원격 테이블에서 모든 행을 가져 와서 로컬로 필터링 합니다. 이 SELECT 문에 사용 된 WHERE 또는 LIMIT에 관계없이 발생합니다. 이러한 명령문은 반환된 행에 로컬로 적용됩니다.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;따라서 인덱스를 사용하지 못하는 쿼리는 성능 저하와 네트워크 과부하를 유발할 수 있습니다. 또한 반환 된 행은 메모리에 저장되어야하므로 이러한 쿼리로 인해 로컬 서버가 스와핑되거나 중단 될 수도 있습니다.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;FEDERATED 저장소 엔진은 SELECT, INSERT, UPDATE, DELETE, TRUNCATE TABLE를 지원합니다. ALTER TABLE 또는 DROP TABLE 이외의 테이블 구조에 직접 영향을 미치는 데이터 정의 언어 문을 지원하지 않습니다&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;Federated 테이블을 사용할 때는 로컬에서 해당 테이블에 인덱스를 직접 생성할 수 없습니다. Federated 테이블에 대한 쿼리 최적화는 원격 서버에서 이루어지며, 원격 서버에서 적절한 인덱스가 설정되어 있는지에 따라 성능이 결정됩니다.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;원본 디비에서 조회하는 쿼리를 그대로 사용 가능하나 수정/추가는 안되고 오로지 조회 용도로 사용 가능하다&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;ㅁ 요약&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;1. 원격 유저의 권한에 따라 Select, insert, update, delete가 가능&lt;/div&gt;
&lt;div&gt;2. 인덱스 생성이 불가능&lt;/div&gt;
&lt;div&gt;3. 테이블에 컬럼변경 속성 변경, 크기 변경등 DDL 불가&lt;/div&gt;
&lt;div&gt;=&amp;gt; federated 테이블을 다시 drop하고 create 필요&lt;/div&gt;
&lt;div&gt;4.원본테이블과 같이 컬럼명을 똑같이 맞춰줘야 한다.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;h2 style=&quot;box-sizing: border-box; border-width: 1px 10px; border-bottom-style: solid; border-bottom-color: #000000; border-left-style: solid; border-left-color: #000000; letter-spacing: -1px; padding: 5px; margin: 5px 0px; line-height: 1;&quot; data-ke-size=&quot;size21&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;&amp;nbsp;테스트&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;/div&gt;
&lt;div&gt;&lt;b&gt;■ 엔진 사용 여부 조회&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;show engines; 조회시 FEDERATED의 Support가 YES인지 확인 -&amp;gt; NO일 경우 아래와 같이 설치 필요&lt;/div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1707284163591&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;MariaDB [(none)]&amp;gt; show engines;
+--------------------+---------+----------------------------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                                          | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------------------------+--------------+------+------------+
| CSV                | YES     | Stores tables as CSV files                                                       | NO           | NO   | NO         |
| MRG_MyISAM         | YES     | Collection of identical MyISAM tables                                            | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables                        | NO           | NO   | NO         |
| Aria               | YES     | Crash-safe tables with MyISAM heritage                                           | NO           | NO   | NO         |
| MyISAM             | YES     | Non-transactional engine with good performance and small data footprint          | NO           | NO   | NO         |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                                               | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, foreign keys and encryption for tables | YES          | YES  | YES        |
| SEQUENCE           | YES     | Generated tables filled with sequential values                                   | YES          | NO   | YES        |
+--------------------+---------+----------------------------------------------------------------------------------+--------------+------+------------+
8 rows in set (0.003 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt; &lt;span&gt;※ 설치 방법&lt;/span&gt; &lt;/b&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; ■ &lt;span&gt;FEDERATED 엔진 플러그인 설치&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1707284200998&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;MariaDB [(none)]&amp;gt; install plugin federated soname 'ha_federated.so';&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&lt;b&gt; ■&amp;nbsp;엔진 활성화&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;my.cnf 구문 추가&lt;/div&gt;
&lt;pre id=&quot;code_1707284229470&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[mariadb@localhost mariadb]$ vi my.cnf
...
[mysqld]
federated&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-client=&quot;ca-pub-7660187941099202&quot; data-ad-slot=&quot;9969021604&quot; data-ad-format=&quot;auto&quot; data-full-width-responsive=&quot;true&quot;&gt;&lt;/ins&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;■&amp;nbsp; &lt;span&gt;DB 재기동 이후 확인&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1707284257770&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;MariaDB [(none)]&amp;gt; show engines;
+--------------------+---------+----------------------------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                                          | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------------------------+--------------+------+------------+
| CSV                | YES     | Stores tables as CSV files                                                       | NO           | NO   | NO         |
| MRG_MyISAM         | YES     | Collection of identical MyISAM tables                                            | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables                        | NO           | NO   | NO         |
| Aria               | YES     | Crash-safe tables with MyISAM heritage                                           | NO           | NO   | NO         |
| MyISAM             | YES     | Non-transactional engine with good performance and small data footprint          | NO           | NO   | NO         |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                                               | NO           | NO   | NO         |
| FEDERATED          | YES     | Allows to access tables on other MariaDB servers                                 | NO           | NO   | NO         |
| SEQUENCE           | YES     | Generated tables filled with sequential values                                   | YES          | NO   | YES        |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, foreign keys and encryption for tables | YES          | YES  | YES        |
+--------------------+---------+----------------------------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.001 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;■ &lt;span&gt;원격지 서버에 DBLink target table 확인&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1707284311341&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;MariaDB [test]&amp;gt; create table kim (
num bigint(20) not null default '0',
regdate date not null,
context text not null,
primary key (num,regdate)
) engine=innodb DEFAULT CHARSET=utf8;&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&lt;b&gt; ■&lt;span&gt;&amp;nbsp;&lt;/span&gt; 소스 서버에 동일한 table 생성&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;1 engine=FEDERATED 로 설정&lt;/div&gt;
&lt;div&gt;2 CONNECTION 구문 추가 필요&lt;/div&gt;
&lt;div&gt;CONNECTION='mysql://계정ID:비밀번호@원격DB서버IP:포트/원격 DB서버 DATABASE 명/테이블명'&lt;/div&gt;
&lt;pre id=&quot;code_1707284353505&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;MariaDB [test]&amp;gt; create table federated_kim (
num bigint(20) not null default '0',
regdate date not null,
context text not null,
primary key (num,regdate)
) engine=FEDERATED DEFAULT CHARSET=utf8
CONNECTION='mysql://kim:kim@192.168.152.131:3306/test/kim';&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;※ 패스워드에 @가 들어간 경우 계속 포맷이 맞지 않다고 아래와 같은 에러가 발생&lt;/div&gt;
&lt;div&gt;Can&amp;rsquo;t create federated table. The data source connection string &amp;lsquo;mysql://~~&amp;rsquo; is not in the correct format&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;앞에 \(역슬레시)를 붙여 이스케이프 처리하고 진행하면 된다.&lt;b&gt;&lt;span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; ■&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;원격지 DB서버에서 데이터 insert&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1707284419594&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;MariaDB [test]&amp;gt; insert into kim values (1,'2024-01-12','test');
Query OK, 1 row affected (0.002 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;■ &lt;span style=&quot;letter-spacing: 0px;&quot;&gt;소스 DB에서 조회&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;데이터가 동기화되어 정상 조회됨&lt;/div&gt;
&lt;pre id=&quot;code_1707284412562&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;MariaDB [test]&amp;gt; select * from federated_kim;
+-----+------------+---------+
| num | regdate    | context |
+-----+------------+---------+
|   1 | 2024-01-12 | test    |
+-----+------------+---------+
1 row in set (0.113 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;box-sizing: border-box; border-width: 1px 10px; border-bottom-style: solid; border-bottom-color: #000000; border-left-style: solid; border-left-color: #000000; letter-spacing: -1px; padding: 5px; margin: 5px 0px; line-height: 1;&quot; data-ke-size=&quot;size21&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt; DML 테스트 &lt;/b&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1707284448882&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;MariaDB [test]&amp;gt; select * from federated_kim;
+-----+------------+---------+---------------+------------+
| num | regdate    | context | email         | phone      |
+-----+------------+---------+---------------+------------+
|   1 | 2024-01-12 | test    | NULL          |       NULL |
|   2 | 2024-01-13 | test    | asd@asdsa.com | 1012311231 |
+-----+------------+---------+---------------+------------+
2 rows in set (0.013 sec)


MariaDB [test]&amp;gt; delete from federated_kim where num=1;
Query OK, 1 row affected (0.009 sec)


MariaDB [test]&amp;gt; select * from federated_kim;
+-----+------------+---------+---------------+------------+
| num | regdate    | context | email         | phone      |
+-----+------------+---------+---------------+------------+
|   2 | 2024-01-13 | test    | asd@asdsa.com | 1012311231 |
+-----+------------+---------+---------------+------------+
1 row in set (0.006 sec)



## 원격지꺼도 삭제됨
MariaDB [test]&amp;gt; select * from kim;
+-----+------------+---------+---------------+------------+
| num | regdate    | context | email         | phone      |
+-----+------------+---------+---------------+------------+
|   2 | 2024-01-13 | test    | asd@asdsa.com | 1012311231 |
+-----+------------+---------+---------------+------------+
1 row in set (0.001 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;box-sizing: border-box; border-width: 1px 10px; border-bottom-style: solid; border-bottom-color: #000000; border-left-style: solid; border-left-color: #000000; letter-spacing: -1px; padding: 5px; margin: 5px 0px; line-height: 1;&quot; data-ke-size=&quot;size21&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;인덱스 생성 테스트&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;■ 소스 DB에서 인덱스 생성시 에러 발생 &lt;/b&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;-&amp;gt; 소스 DB에서는 원격 테이블에 DDL불가&lt;/div&gt;
&lt;pre id=&quot;code_1707284666605&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;MariaDB [test]&amp;gt; create index test_idx on federated_kim(phone);
ERROR 1031 (HY000): Storage engine FEDERATED of the table `test`.`federated_kim` doesn't have this option&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; ■ &lt;span&gt;&lt;span&gt;원격지 DB에서 인덱스 생성&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1707284712589&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;MariaDB [test]&amp;gt; create index test_id on kim(phone);
Query OK, 0 rows affected (0.015 sec)


MariaDB [test]&amp;gt; show index in kim;
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| kim   |          0 | PRIMARY  |            1 | num         | A         |           1 |     NULL | NULL   |      | BTREE      |         |               |
| kim   |          0 | PRIMARY  |            2 | regdate     | A         |           1 |     NULL | NULL   |      | BTREE      |         |               |
| kim   |          1 | test_id  |            1 | phone       | A         |           1 |     NULL | NULL   | YES  | BTREE      |         |               |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;■ 소스 DB 인덱스 확인&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;-&amp;gt; 미반영&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;pre id=&quot;code_1707284742617&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;MariaDB [test]&amp;gt; show indexes in federated_kim;
+---------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table         | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+---------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| federated_kim |          0 | PRIMARY  |            1 | num         | NULL      |        NULL |     NULL | NULL   |      | REMOTE     |         |               |
| federated_kim |          0 | PRIMARY  |            2 | regdate     | NULL      |        NULL |     NULL | NULL   |      | REMOTE     |         |               |
+---------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; ■&lt;span&gt;&amp;nbsp;&lt;/span&gt; &lt;span&gt;&lt;span&gt;소스 DB 테이블 재작성&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1707284771705&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;## 원본 테이블 조회
MariaDB [test]&amp;gt; show create table kim
    -&amp;gt; ;
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                                                                                                          |
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| kim   | CREATE TABLE `kim` (
  `num` bigint(20) NOT NULL DEFAULT 0,
  `regdate` date NOT NULL,
  `context` text NOT NULL,
  `email` varchar(25) DEFAULT NULL,
  `phone` int(25) DEFAULT NULL,
  PRIMARY KEY (`num`,`regdate`),
  KEY `test_id` (`phone`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+



## 소스 DB 테이블 삭제 후 재생성
MariaDB [test]&amp;gt; drop table federated_kim;
Query OK, 0 rows affected (0.001 sec)


MariaDB [test]&amp;gt; CREATE TABLE `federated_kim` (
    -&amp;gt;   `num` bigint(20) NOT NULL DEFAULT 0,
    -&amp;gt;   `regdate` date NOT NULL,
    -&amp;gt;   `context` text NOT NULL,
    -&amp;gt;   `email` varchar(25) DEFAULT NULL,
    -&amp;gt;   `phone` int(25) DEFAULT NULL,
    -&amp;gt;   PRIMARY KEY (`num`,`regdate`),
    -&amp;gt;   KEY `test_id` (`phone`)
    -&amp;gt; ) ENGINE=FEDERATED DEFAULT CHARSET=utf8
    -&amp;gt; CONNECTION='mysql://kim:kim@192.168.152.131:3306/test/kim';
Query OK, 0 rows affected (0.002 sec)



## 소스 DB에서 인덱스 조회시 반영 확인
MariaDB [test]&amp;gt; show index in federated_kim;
+---------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table         | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+---------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| federated_kim |          0 | PRIMARY  |            1 | num         | NULL      |        NULL |     NULL | NULL   |      | REMOTE     |         |               |
| federated_kim |          0 | PRIMARY  |            2 | regdate     | NULL      |        NULL |     NULL | NULL   |      | REMOTE     |         |               |
| federated_kim |          1 | test_id  |            1 | phone       | NULL      |        NULL |     NULL | NULL   | YES  | REMOTE     |         |               |
+---------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;참고&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;docs :&amp;nbsp;&lt;a href=&quot;https://dev.mysql.com/doc/refman/8.0/en/federated-storage-engine.html&quot;&gt;https://dev.mysql.com/doc/refman/8.0/en/federated-storage-engine.html&lt;/a&gt;
&lt;figure id=&quot;og_1707284796791&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;MySQL :: MySQL 8.0 Reference Manual :: 18.8 The FEDERATED Storage Engine&quot; data-og-description=&quot;&quot; data-og-host=&quot;dev.mysql.com&quot; data-og-source-url=&quot;https://dev.mysql.com/doc/refman/8.0/en/federated-storage-engine.html&quot; data-og-url=&quot;https://dev.mysql.com/doc/refman/8.0/en/federated-storage-engine.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://dev.mysql.com/doc/refman/8.0/en/federated-storage-engine.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://dev.mysql.com/doc/refman/8.0/en/federated-storage-engine.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;MySQL :: MySQL 8.0 Reference Manual :: 18.8 The FEDERATED Storage Engine&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;dev.mysql.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;</description>
      <category>DataBase/MySQL &amp;amp; MariaDB</category>
      <author>jeonghyun</author>
      <guid isPermaLink="true">https://jhdatabase.tistory.com/198</guid>
      <comments>https://jhdatabase.tistory.com/entry/MySQL-MariaDB-Federated-Engine-%EC%82%AC%EC%9A%A9-%ED%85%8C%EC%8A%A4%ED%8A%B8#entry198comment</comments>
      <pubDate>Wed, 7 Feb 2024 14:48:04 +0900</pubDate>
    </item>
    <item>
      <title>[MySQL &amp;amp; MariaDB - Relay Log 변경 시 replication 복제 에러 해결방법]</title>
      <link>https://jhdatabase.tistory.com/entry/MySQL-MariaDB-Relay-Log-%EB%B3%80%EA%B2%BD-%EC%8B%9C-replication-%EB%B3%B5%EC%A0%9C-%EC%97%90%EB%9F%AC-%ED%95%B4%EA%B2%B0%EB%B0%A9%EB%B2%95</link>
      <description>&lt;h2 style=&quot;box-sizing: border-box; border-width: 1px 10px; border-bottom-style: solid; border-bottom-color: #000000; border-left-style: solid; border-left-color: #000000; letter-spacing: -1px; padding: 5px; margin: 5px 0px; line-height: 1;&quot; data-ke-size=&quot;size21&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #383838; text-align: start;&quot;&gt;발생 에러&lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1704343485824&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;MariaDB [(none)]&amp;gt; start slave;
ERROR 1201 (HY000): Could not initialize master info structure for ''; more error messages can be found in the MariaDB error log


## 에러 로그
2023-12-20 16:42:39 0 [ERROR] Failed to open the relay log './kjh-relay-bin.000008' (relay_log_pos 633)
2023-12-20 16:42:39 0 [ERROR] Could not find target log during relay log initialization
2023-12-20 16:42:39 0 [ERROR] Failed to initialize the master info structure&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;box-sizing: border-box; border-width: 1px 10px; border-bottom-style: solid; border-bottom-color: #000000; border-left-style: solid; border-left-color: #000000; letter-spacing: -1px; padding: 5px; margin: 5px 0px; line-height: 1;&quot; data-ke-size=&quot;size21&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #383838; text-align: start;&quot;&gt;발생 원인&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;relay&amp;nbsp;log&amp;nbsp;형식이&amp;nbsp;지정이&amp;nbsp;안되어있어서&amp;nbsp;relay&amp;nbsp;log가&amp;nbsp;호스트이름으로&amp;nbsp;파일이&amp;nbsp;생성됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;u&gt;slave에서&amp;nbsp;이를&amp;nbsp;인식하지&amp;nbsp;못하여&amp;nbsp;start&amp;nbsp;slave&amp;nbsp;불가하는&amp;nbsp;현상&amp;nbsp;발생&lt;/u&gt;&lt;/b&gt;. &lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로&amp;nbsp;릴레이&amp;nbsp;로그에는&amp;nbsp;서버의&amp;nbsp;호스트&amp;nbsp;이름을&amp;nbsp;참조하는&amp;nbsp;이름과&amp;nbsp;#nnnnnn이&amp;nbsp;host_name-relay-bin.nnnnnn지정&amp;nbsp;됩니다. &lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;복제본의 호스트 이름이 변경되면 문제가 발생 Failed to open the relay log하고 오류가 반환됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;오류 : Could not find target log during relay log initialization&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1704343610769&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;## 마지막으로 읽은 binlog 파일과 pos번호 필수 확인!
MariaDB [(none)]&amp;gt; show slave status\G;
*************************** 1. row ***************************
                Slave_IO_State:
                   Master_Host: 192.168.152.130
                   Master_User: repl
                   Master_Port: 3306
                 Connect_Retry: 10
               Master_Log_File: mysql.000003
           Read_Master_Log_Pos: 338
                Relay_Log_File: kjh-relay-bin.000008
                 Relay_Log_Pos: 633
         Relay_Master_Log_File: mysql.000003
              Slave_IO_Running: No
             Slave_SQL_Running: No
               Replicate_Do_DB:
           Replicate_Ignore_DB:
            Replicate_Do_Table:
        Replicate_Ignore_Table:
       Replicate_Wild_Do_Table:
   Replicate_Wild_Ignore_Table:
                    Last_Errno: 0
                    Last_Error:
                  Skip_Counter: 0
           Exec_Master_Log_Pos: 338
               Relay_Log_Space: 0
               Until_Condition: None
                Until_Log_File:
                 Until_Log_Pos: 0
            Master_SSL_Allowed: No
            Master_SSL_CA_File:
            Master_SSL_CA_Path:
               Master_SSL_Cert:
             Master_SSL_Cipher:
                Master_SSL_Key:
         Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
                 Last_IO_Errno: 0
                 Last_IO_Error:
                Last_SQL_Errno: 0
                Last_SQL_Error:
   Replicate_Ignore_Server_Ids:
              Master_Server_Id: 0
                Master_SSL_Crl:
            Master_SSL_Crlpath:
                    Using_Gtid: No
                   Gtid_IO_Pos:
       Replicate_Do_Domain_Ids:
   Replicate_Ignore_Domain_Ids:
                 Parallel_Mode: conservative
                     SQL_Delay: 0
           SQL_Remaining_Delay: NULL
       Slave_SQL_Running_State:
              Slave_DDL_Groups: 0
Slave_Non_Transactional_Groups: 0
    Slave_Transactional_Groups: 0
1 row in set (0.000 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-client=&quot;ca-pub-7660187941099202&quot; data-ad-slot=&quot;9969021604&quot; data-ad-format=&quot;auto&quot; data-full-width-responsive=&quot;true&quot;&gt;&lt;/ins&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;box-sizing: border-box; border-width: 1px 10px; border-bottom-style: solid; border-bottom-color: #000000; border-left-style: solid; border-left-color: #000000; letter-spacing: -1px; padding: 5px; margin: 5px 0px; line-height: 1;&quot; data-ke-size=&quot;size21&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #383838; text-align: start;&quot;&gt;해결 방법&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;■&amp;nbsp; Relay_log 및 Relay_log_index 시스템 변수를 설정하여 릴레이 로그 파일 이름을 지정&lt;/p&gt;
&lt;pre id=&quot;code_1704343667634&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;## my.cnf
relay_log=mariadb-relay-bin
relay_log_index=mariadb-relay-bin&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;■ 복제가 이미 진행 중인 동안 이 문제를 해결해야 하는 경우 복제본을 중지하고 이전 릴레이 로그 인덱스 파일을 새 릴레이 로그 인덱스 파일 앞에 추가한 다음 복제본을 다시 시작할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1704343712720&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;## 현재 kjh-relay log 사용
MariaDB [(none)]&amp;gt; show relaylog events;
+----------------------+-----+-------------+-----------+-------------+------------------------------------------------+
| Log_name             | Pos | Event_type  | Server_id | End_log_pos | Info                                           |
+----------------------+-----+-------------+-----------+-------------+------------------------------------------------+
| kjh-relay-bin.000007 |   4 | Format_desc |         2 |         256 | Server ver: 10.3.22-MariaDB, Binlog ver: 4     |
| kjh-relay-bin.000007 | 256 | Rotate      |         1 |           0 | mysql.000002;pos=12077486                      |
| kjh-relay-bin.000007 | 299 | Format_desc |         1 |           0 | Server ver: 10.3.22-MariaDB-log, Binlog ver: 4 |
| kjh-relay-bin.000007 | 551 | Rotate      |         2 |         602 | kjh-relay-bin.000008;pos=4                     |
+----------------------+-----+-------------+-----------+-------------+------------------------------------------------+
4 rows in set (0.000 sec)


## hostname이 jh로 변경될 경우(db재기동) 아래와 같이 jh-relay log 파일이 생성됨
-rw-rw----. 1 mariadb mariadb         6 12월 21 10:11 jh.pid
-rw-rw----. 1 mariadb mariadb        66 12월 21 10:11 jh-relay-bin.index
-rw-rw----. 1 mariadb mariadb       279 12월 21 10:11 jh-relay-bin.000005


## slave를 실행하면 아래와 같은 에러 발생
MariaDB [(none)]&amp;gt; start slave;
ERROR 1201 (HY000): Could not initialize master info structure for ''; more error messages can be found in the MariaDB error log



[해결 방법 1]
ㅁ 형식
shell&amp;gt; cat NEW_relay_log_name.index &amp;gt;&amp;gt; OLD_relay_log_name.index
shell&amp;gt; mv OLD_relay_log_name.index NEW_relay_log_name.index

## DB중지
[root@jh datadir]# mysqladmin -uroot -proot shutdown

## relay log index 수정
[root@jh datadir]# cat jh-relay-bin.index &amp;gt;&amp;gt; kjh-relay-bin.index
[root@jh datadir]# mv kjh-relay-bin.index jh-relay-bin.index

## DB 기동
[root@jh datadir]# sh +x /mariadb/mariadb/startup.sh

## slave status 확인 -&amp;gt; 정상



[해결 방법 2]
MariaDB [(none)]&amp;gt; reset slave;
Query OK, 0 rows affected (0.008 sec)


## master 정보를 다시 지정해줄땐 stop slave이 후 show slave status;를 통해 반영된 binlog와 pos값을 확인해 해당 시점부터 복제가 이루어질수 있도록 재설정이 필요하다.
MariaDB [(none)]&amp;gt; CHANGE MASTER TO MASTER_HOST='192.168.152.130', MASTER_USER='repl',MASTER_PASSWORD='repl',MASTER_PORT=3306,MASTER_LOG_FILE='mysql.000003', MASTER_LOG_POS=338,MASTER_CONNECT_RETRY=10;
Query OK, 0 rows affected (0.014 sec)


MariaDB [(none)]&amp;gt; start slave;
Query OK, 0 rows affected (0.002 sec)


MariaDB [(none)]&amp;gt; show slave status\G;
*************************** 1. row ***************************
                Slave_IO_State: Waiting for master to send event
                   Master_Host: 192.168.152.130
                   Master_User: repl
                   Master_Port: 3306
                 Connect_Retry: 10
               Master_Log_File: mysql.000003
           Read_Master_Log_Pos: 338
                Relay_Log_File: jh-relay-bin.000007
                 Relay_Log_Pos: 551
         Relay_Master_Log_File: mysql.000003
              Slave_IO_Running: Yes
             Slave_SQL_Running: Yes
               Replicate_Do_DB:
           Replicate_Ignore_DB:
            Replicate_Do_Table:
        Replicate_Ignore_Table:
       Replicate_Wild_Do_Table:
   Replicate_Wild_Ignore_Table:
                    Last_Errno: 0
                    Last_Error:
                  Skip_Counter: 0
           Exec_Master_Log_Pos: 338
               Relay_Log_Space: 857
               Until_Condition: None
                Until_Log_File:
                 Until_Log_Pos: 0
            Master_SSL_Allowed: No
            Master_SSL_CA_File:
            Master_SSL_CA_Path:
               Master_SSL_Cert:
             Master_SSL_Cipher:
                Master_SSL_Key:
         Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                 Last_IO_Errno: 0
                 Last_IO_Error:
                Last_SQL_Errno: 0
                Last_SQL_Error:
   Replicate_Ignore_Server_Ids:
              Master_Server_Id: 1
                Master_SSL_Crl:
            Master_SSL_Crlpath:
                    Using_Gtid: No
                   Gtid_IO_Pos:
       Replicate_Do_Domain_Ids:
   Replicate_Ignore_Domain_Ids:
                 Parallel_Mode: conservative
                     SQL_Delay: 0
           SQL_Remaining_Delay: NULL
       Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
              Slave_DDL_Groups: 0
Slave_Non_Transactional_Groups: 0
    Slave_Transactional_Groups: 0
1 row in set (0.001 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;참고&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #383838; text-align: start;&quot;&gt;Docs :&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://mariadb.com/kb/en/relay-log/&quot;&gt;https://mariadb.com/kb/en/relay-log/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1704343761481&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Relay Log&quot; data-og-description=&quot;Event log created by the replica from the primary binary log.&quot; data-og-host=&quot;mariadb.com&quot; data-og-source-url=&quot;https://mariadb.com/kb/en/relay-log/&quot; data-og-url=&quot;https://mariadb.com/kb/en/relay-log/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://mariadb.com/kb/en/relay-log/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://mariadb.com/kb/en/relay-log/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Relay Log&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Event log created by the replica from the primary binary log.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;mariadb.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>DataBase/MySQL &amp;amp; MariaDB</category>
      <author>jeonghyun</author>
      <guid isPermaLink="true">https://jhdatabase.tistory.com/197</guid>
      <comments>https://jhdatabase.tistory.com/entry/MySQL-MariaDB-Relay-Log-%EB%B3%80%EA%B2%BD-%EC%8B%9C-replication-%EB%B3%B5%EC%A0%9C-%EC%97%90%EB%9F%AC-%ED%95%B4%EA%B2%B0%EB%B0%A9%EB%B2%95#entry197comment</comments>
      <pubDate>Fri, 5 Jan 2024 12:00:11 +0900</pubDate>
    </item>
    <item>
      <title>[MySQL &amp;amp; MariaDB - Partition Exchange]</title>
      <link>https://jhdatabase.tistory.com/entry/MySQL-MariaDB-Partition-Exchange</link>
      <description>&lt;h2 style=&quot;box-sizing: border-box; border-width: 1px 10px; border-bottom-style: solid; border-bottom-color: #000000; border-left-style: solid; border-left-color: #000000; letter-spacing: -1px; padding: 5px; margin: 5px 0px; line-height: 1;&quot; data-ke-size=&quot;size21&quot;&gt;&lt;span style=&quot;color: #383838; text-align: start;&quot;&gt;Partition Exchange 란?&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;원본 테이블을 파티션 테이블로 생성한 후 원본 테이블의 데이터가 너무 커지면 파티션을 다른 테이블로 이관할 수 있는 기능&lt;/u&gt;으로 MariaDB&amp;nbsp;Partition&amp;nbsp;Exchange는&amp;nbsp;MariaDB에서&amp;nbsp;파티셔닝된&amp;nbsp;테이블에서&amp;nbsp;데이터를&amp;nbsp;교환하고&amp;nbsp;재조정하기&amp;nbsp;위한&amp;nbsp;기능입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이&amp;nbsp;기능은&amp;nbsp;특히&amp;nbsp;대량의&amp;nbsp;데이터를&amp;nbsp;효과적으로&amp;nbsp;관리하고&amp;nbsp;쿼리&amp;nbsp;성능을&amp;nbsp;최적화하는&amp;nbsp;데&amp;nbsp;사용됩니다.&amp;nbsp;파티셔닝은&amp;nbsp;테이블을&amp;nbsp;논리적&amp;nbsp;또는&amp;nbsp;물리적으로&amp;nbsp;분할하여&amp;nbsp;데이터를&amp;nbsp;더&amp;nbsp;쉽게&amp;nbsp;관리하고&amp;nbsp;쿼리&amp;nbsp;성능을&amp;nbsp;향상시키는&amp;nbsp;기술입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MySQL 5.6 버전/MariaDB 10.0 버전부터 지원가능.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;box-sizing: border-box; border-width: 1px 10px; border-bottom-style: solid; border-bottom-color: #000000; border-left-style: solid; border-left-color: #000000; letter-spacing: -1px; padding: 5px; margin: 5px 0px; line-height: 1;&quot; data-ke-size=&quot;size21&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;&amp;nbsp;목적 및 장점&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;■ 목적 : 보관주기가 지난 파티션을 삭제전 삭제 대상 데이터를 백업하기 위한 목적&lt;br /&gt;■ 장점&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 특정 파티션에 대한 삭제 시 락(잠금)이나 부하에 대한 최소화 및 일반 테이블을 특정 파티션으로 하고자 할 때 작업 영향도를 최소화하면서 파티션 작업을 수행 가능 &lt;br /&gt;2) Partition exchange 이후 drop partition시 데이터가 있을 때보다 더 빠르게 작업 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;box-sizing: border-box; border-width: 1px 10px; border-bottom-style: solid; border-bottom-color: #000000; border-left-style: solid; border-left-color: #000000; letter-spacing: -1px; padding: 5px; margin: 5px 0px; line-height: 1;&quot; data-ke-size=&quot;size21&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;&amp;nbsp;테스트&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; ■ &lt;span style=&quot;color: #383838; text-align: start;&quot;&gt;파티션 테이블 생성&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1704342077422&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;create table ori_table (
num bigint(20) not null default '0',
regdate date not null,
context text not null,
primary key (num,regdate)
) engine=innodb DEFAULT CHARSET=utf8
partition by range columns(regdate)
(partition p202301 values less than ('2023-02-01'),
partition p202302 values less than ('2023-03-01'),
partition p202303 values less than ('2023-04-01'),
partition p202304 values less than ('2023-05-01'),
partition p202305 values less than ('2023-06-01'),
partition p202306 values less than ('2023-07-01'),
partition p202307 values less than ('2023-08-01'),
partition p202308 values less than ('2023-09-01'),
partition p202309 values less than ('2023-10-01'),
partition p202310 values less than ('2023-11-01'),
partition p202311 values less than ('2023-12-01'),
partition p202312 values less than ('2024-01-01'));&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;■ 보관 테이블 생성 (테이블 구조 복사)&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1704342134022&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE TABLE new_partition_table_202301 like ori_table;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #383838; text-align: start;&quot;&gt; &lt;b&gt;■&lt;/b&gt; 원본 테이블 테스트 데이터 insert&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1704342166214&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;## 데이터 생성
MariaDB [test]&amp;gt; insert ignore into ori_table  values(rand()*1000000000, date_sub('2018-01-01', interval rand()*365 day),  uuid());


## 데이터 insert 쉘 작성 및 실행
[root@localhost scripts]# vi kim.sh
#!/bin/bash

for ((i=0; i&amp;lt;10000; i++)) do
        ins_qry=&quot;insert ignore into ori_table
        select rand()*1000000000,
        date_sub('2024-01-01', interval rand()*365 day), uuid()
        from ori_table&quot;
        /mariadb/mariadb/instance/bin/mysql -uroot -proot test -e &quot;${ins_qry}&quot;
done


[root@localhost scripts]# sh +x kim.sh


## 테스트 데이터 확인
MariaDB [test]&amp;gt; select table_name, partition_name, table_rows from information_schema.partitions where table_name='ori_table';
+------------+----------------+------------+
| table_name | partition_name | table_rows |
+------------+----------------+------------+
| ori_table  | p202301        |    1190848 |
| ori_table  | p202302        |    1036774 |
| ori_table  | p202303        |    1104748 |
| ori_table  | p202304        |    1076586 |
| ori_table  | p202305        |    1205980 |
| ori_table  | p202306        |    1129219 |
| ori_table  | p202307        |    1030419 |
| ori_table  | p202308        |    1123921 |
| ori_table  | p202309        |    1058284 |
| ori_table  | p202310        |    1040318 |
| ori_table  | p202311        |    1108320 |
| ori_table  | p202312        |    1164151 |
+------------+----------------+------------+
12 rows in set (0.028 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-client=&quot;ca-pub-7660187941099202&quot; data-ad-slot=&quot;9969021604&quot; data-ad-format=&quot;auto&quot; data-full-width-responsive=&quot;true&quot;&gt;&lt;/ins&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #383838; text-align: start;&quot;&gt;&lt;span style=&quot;color: #383838; text-align: start;&quot;&gt;■&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #383838; text-align: start;&quot;&gt; 보관&amp;nbsp;테이블&amp;nbsp;파티션&amp;nbsp;삭제&lt;/span&gt;&lt;span style=&quot;color: #383838; text-align: start;&quot;&gt;&lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;※&amp;nbsp;보관&amp;nbsp;테이블에&amp;nbsp;파티션&amp;nbsp;존재시&amp;nbsp;partition&amp;nbsp;exchange&amp;nbsp;불가&lt;/span&gt; &lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1704342216102&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;MariaDB [test]&amp;gt; alter table new_partition_table_202301 remove partitioning;
Query OK, 0 rows affected (0.509 sec)              
Records: 0  Duplicates: 0  Warnings: 0&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #383838; text-align: start;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #383838; text-align: start;&quot;&gt; &lt;b&gt;&lt;span style=&quot;color: #383838; text-align: start;&quot;&gt;&lt;span style=&quot;color: #383838; text-align: start;&quot;&gt;■&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #383838; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt; partition&amp;nbsp;exchange&amp;nbsp;실행&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1704342238174&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;MariaDB [test]&amp;gt; alter table ori_table exchange partition p202301 with table new_partition_table_202301;
Query OK, 0 rows affected (0.065 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #383838; text-align: start;&quot;&gt; &lt;b&gt;&lt;span style=&quot;color: #383838; text-align: start;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #383838; text-align: start;&quot;&gt;&lt;span style=&quot;color: #383838; text-align: start;&quot;&gt;■&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #383838; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt; 데이터&amp;nbsp;건&amp;nbsp;수&amp;nbsp;조회&amp;nbsp; &lt;br /&gt;- 정상 확인&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1704342275127&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;## 원본 테이블
MariaDB [test]&amp;gt; select table_name, partition_name, table_rows from information_schema.partitions where table_name='ori_table';
+------------+----------------+------------+
| table_name | partition_name | table_rows |
+------------+----------------+------------+
| ori_table  | p202301        |          0 |
| ori_table  | p202302        |    1036774 |
| ori_table  | p202303        |    1104748 |
| ori_table  | p202304        |    1076586 |
| ori_table  | p202305        |    1205980 |
| ori_table  | p202306        |    1129219 |
| ori_table  | p202307        |    1030419 |
| ori_table  | p202308        |    1123921 |
| ori_table  | p202309        |    1058284 |
| ori_table  | p202310        |    1040318 |
| ori_table  | p202311        |    1108320 |
| ori_table  | p202312        |    1164151 |
+------------+----------------+------------+
12 rows in set (0.067 sec)


## 보관 테이블
MariaDB [test]&amp;gt; select table_name, partition_name, table_rows from information_schema.partitions where table_name='new_partition_table_202301';
+----------------------------+----------------+------------+
| table_name                 | partition_name | table_rows |
+----------------------------+----------------+------------+
| new_partition_table_202301 | NULL           |    1190848 |
+----------------------------+----------------+------------+
1 row in set (0.001 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #383838; text-align: start;&quot;&gt;&lt;span style=&quot;color: #383838; text-align: start;&quot;&gt;&lt;span style=&quot;color: #383838; text-align: start;&quot;&gt;&lt;span style=&quot;color: #383838; text-align: start;&quot;&gt;■&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #383838; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt; &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #383838; text-align: start;&quot;&gt;원본 테이블 파티션 drop&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1704342305616&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;MariaDB [test]&amp;gt; alter table ori_table drop partition p202301;
Query OK, 0 rows affected (0.051 sec)
Records: 0  Duplicates: 0  Warnings: 0&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※&amp;nbsp;partition&amp;nbsp;exchange를&amp;nbsp;사용하여&amp;nbsp;옮겨진&amp;nbsp;테이블을&amp;nbsp;파티션&amp;nbsp;테이블로&amp;nbsp;구성&amp;nbsp;불가 &lt;br /&gt;partition exchange를 한 테이블은 파티션을 지우지 않는 한 partition exchange를 할 수 없습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;참고&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://m.blog.naver.com/theswice/221167500999&quot;&gt;https://m.blog.naver.com/theswice/221167500999&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1704342351451&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;partition exchange(mysql 5.6)&quot; data-og-description=&quot;원본 테이블을 파티션 테이블로 생성한 후 원본 테이블의 데이터가 너무 커지면 파티션을 다른 테이블로 이...&quot; data-og-host=&quot;blog.naver.com&quot; data-og-source-url=&quot;https://m.blog.naver.com/theswice/221167500999&quot; data-og-url=&quot;https://blog.naver.com/theswice/221167500999&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bZO29U/hyUXTEVjGs/28YmU3mPw5wtZZ0faqu6qk/img.png?width=270&amp;amp;height=270&amp;amp;face=0_0_270_270&quot;&gt;&lt;a href=&quot;https://m.blog.naver.com/theswice/221167500999&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://m.blog.naver.com/theswice/221167500999&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bZO29U/hyUXTEVjGs/28YmU3mPw5wtZZ0faqu6qk/img.png?width=270&amp;amp;height=270&amp;amp;face=0_0_270_270');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;partition exchange(mysql 5.6)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;원본 테이블을 파티션 테이블로 생성한 후 원본 테이블의 데이터가 너무 커지면 파티션을 다른 테이블로 이...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;blog.naver.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>DataBase/MySQL &amp;amp; MariaDB</category>
      <category>partition exchange</category>
      <author>jeonghyun</author>
      <guid isPermaLink="true">https://jhdatabase.tistory.com/196</guid>
      <comments>https://jhdatabase.tistory.com/entry/MySQL-MariaDB-Partition-Exchange#entry196comment</comments>
      <pubDate>Thu, 4 Jan 2024 18:26:43 +0900</pubDate>
    </item>
    <item>
      <title>[PostgreSQL - Vacuum Lock 확인]</title>
      <link>https://jhdatabase.tistory.com/entry/PostgreSQL-Vacuum-Lock-%ED%99%95%EC%9D%B8</link>
      <description>&lt;h2 style=&quot;box-sizing: border-box; border-width: 1px 10px; border-bottom-style: solid; border-bottom-color: #000000; border-left-style: solid; border-left-color: #000000; letter-spacing: -1px; padding: 5px; margin: 5px 0px; line-height: 1;&quot; data-ke-size=&quot;size21&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt; &lt;b&gt;Vacuum이란?&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #383838; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Vacuum은 PostgreSQL의 MVCC 구현 방법이 Oracle이나 MySQL 등 다른 DBMS와 다르고 그 차이로 인해 발생하는 문제점을 해결하기 위한 PostgreSQL만의 특별한 동작인데요.&lt;br /&gt;&lt;br /&gt;Vacuum을 DB단에서 자동으로 수행하는 동작을 AutoVacuum이라고 하며 Vacuum &amp;amp; AutoVacuum(이하 Vacuum으로 통일)을 통해 아래 4가지 작업을 수행합니다.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;- 임계치 이상으로 발생한 Dead Tuple을 정리하여 FSM (Free Space Map) 으로 반환&lt;br /&gt;- Transaction ID Wraparound 방지&lt;br /&gt;- 통계정보 갱신&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;- visibility map을 갱신하여 index scan 성능 향상&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #383838; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #383838; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 4개의 동작 모두 중요하지만 그 중 특히 중요한 것은 Dead Tuple을 정리하는 동작과 Trasaction ID Wraparound 방지 동작입니다.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;box-sizing: border-box; border-width: 1px 10px; border-bottom-style: solid; border-bottom-color: #000000; border-left-style: solid; border-left-color: #000000; letter-spacing: -1px; padding: 5px; margin: 5px 0px; line-height: 1;&quot; data-ke-size=&quot;size21&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;&amp;nbsp;Vacuum 종류&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;margin-bottom: 28px; line-height: 26px; color: #555555; font-family: 'Noto Sans KR', Arial, 'Apple SD Gothic Neo', 'Malgun Gothic', '맑은 고딕', 'Nanum Gothic', Dotum, 돋움, Helvetica, sans-serif; font-variant-ligatures: normal; font-variant-caps: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; padding-top: 0px !important; padding-bottom: 0px !important; margin-top: 0px !important;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1) Vacuum&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 삭제 된 데이터나 Update된 데이터의 이전 버전을 마킹 하여 그 공간을 다시 사용할 수 있게 해 주는 기본 Vacuum 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-bottom: 28px; line-height: 26px; color: #555555; font-family: 'Noto Sans KR', Arial, 'Apple SD Gothic Neo', 'Malgun Gothic', '맑은 고딕', 'Nanum Gothic', Dotum, 돋움, Helvetica, sans-serif; font-variant-ligatures: normal; font-variant-caps: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; padding-top: 0px !important; padding-bottom: 0px !important; margin-top: 0px !important;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2) Vacuum Freeze&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 삭제 된 데이터만이 아니라 남아있는 데이터에 대해서도 XID를 2로 변경해 주어 앞으로 XID wrap around가 발생하더라도 문제가 없도록 해 줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-bottom: 28px; line-height: 26px; color: #555555; font-family: 'Noto Sans KR', Arial, 'Apple SD Gothic Neo', 'Malgun Gothic', '맑은 고딕', 'Nanum Gothic', Dotum, 돋움, Helvetica, sans-serif; font-variant-ligatures: normal; font-variant-caps: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; padding-top: 0px !important; padding-bottom: 0px !important; margin-top: 0px !important;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3) Vacuum (prevent wrap around)&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;- XID Wrap around가 다가오는 상황에서 아직 freeze 되지 않은 데이터가 남아 있을 경우 강제로 vacuum freez를 시도 하는데 이 때 실행되는 vacuum 작업이 VACUUM (prevent wrap around) 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-bottom: 28px; line-height: 26px; color: #555555; font-family: 'Noto Sans KR', Arial, 'Apple SD Gothic Neo', 'Malgun Gothic', '맑은 고딕', 'Nanum Gothic', Dotum, 돋움, Helvetica, sans-serif; font-variant-ligatures: normal; font-variant-caps: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; padding-top: 0px !important; padding-bottom: 0px !important; margin-top: 0px !important;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4) Vacuum Full&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;-&amp;nbsp;삭제된&amp;nbsp;데이터를&amp;nbsp;마킹만&amp;nbsp;하는게&amp;nbsp;아니라&amp;nbsp;아예&amp;nbsp;정상적인&amp;nbsp;데이터만으로&amp;nbsp;테이블을&amp;nbsp;새로&amp;nbsp;만들어서&amp;nbsp;빈공간까지&amp;nbsp;회수하는&amp;nbsp;작업,&amp;nbsp;Table&amp;nbsp;전체에&amp;nbsp;Lock을&amp;nbsp;걸기&amp;nbsp;때문에&amp;nbsp;운영중에&amp;nbsp;실행하면&amp;nbsp;안됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-bottom: 28px; line-height: 26px; color: #555555; font-family: 'Noto Sans KR', Arial, 'Apple SD Gothic Neo', 'Malgun Gothic', '맑은 고딕', 'Nanum Gothic', Dotum, 돋움, Helvetica, sans-serif; font-variant-ligatures: normal; font-variant-caps: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; padding-top: 0px !important; padding-bottom: 0px !important; margin-top: 0px !important;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;5)&amp;nbsp;Auto&amp;nbsp;Vacuum &lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;내부&amp;nbsp;알고리즘으로&amp;nbsp;필요에&amp;nbsp;따라&amp;nbsp;자동으로&amp;nbsp;실행되는&amp;nbsp;Vacuum&amp;nbsp;입니다. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&amp;nbsp;- 기본적으로 실시간(주기적)으로 Vacuum 작업(ex, vacuum만 실행, vacuum full아님) 실시하며, autovacuum_freeze_max_age에 도달하면 강제로 Vacuum 작업(ex, vacuum freeze)을 실시하게 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h2 style=&quot;box-sizing: border-box; border-width: 1px 10px; border-bottom-style: solid; border-bottom-color: #000000; border-left-style: solid; border-left-color: #000000; letter-spacing: -1px; padding: 5px; margin: 5px 0px; line-height: 1;&quot; data-ke-size=&quot;size21&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;&amp;nbsp;사전 작업&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;div&gt;&lt;b&gt; &lt;span style=&quot;color: #383838; text-align: start;&quot;&gt;ㅁ 테스트 데이터 생성&lt;/span&gt; &lt;/b&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1704333686800&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kim=# create table test (i numeric);
CREATE TABLE


## 100만건 행 삽입
[postgres@localhost ~]$ vi kim.sh
for i in {1..1000000}
do
psql -U postgres -d kim -c &quot;insert into test$i values ($i)&quot;
done


kim=# select count(*) from test;
  count  
---------
1000000
(1 row)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #383838; text-align: start;&quot;&gt;ㅁ autovacuum 실행 조건 확인&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;489&quot; data-origin-height=&quot;230&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cqVPkx/btsCUBCO8Ia/G232zZmfsS2tCmjk7t7BxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cqVPkx/btsCUBCO8Ia/G232zZmfsS2tCmjk7t7BxK/img.png&quot; data-alt=&quot;autovacuum 파라미터확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cqVPkx/btsCUBCO8Ia/G232zZmfsS2tCmjk7t7BxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcqVPkx%2FbtsCUBCO8Ia%2FG232zZmfsS2tCmjk7t7BxK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;489&quot; height=&quot;230&quot; data-origin-width=&quot;489&quot; data-origin-height=&quot;230&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;autovacuum 파라미터확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #383838; text-align: start;&quot;&gt;ㅁ autovacuum 대상 확인&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1704333993984&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;postgres=# select schemaname, relname, n_dead_tup from pg_stat_user_tables where n_dead_tup &amp;gt; 0 and (last_autovacuum is null or last_autoanalyze is null);
schemaname | relname | n_dead_tup
------------+---------+------------
(0 rows)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span style=&quot;color: #383838; text-align: start;&quot;&gt;ㅁ autovacuum OFF&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1704333870784&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;alter system set autovacuum=OFF;&lt;/code&gt;&lt;/pre&gt;
&lt;!-- 중간삽입 --&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-client=&quot;ca-pub-7660187941099202&quot; data-ad-slot=&quot;9969021604&quot; data-ad-format=&quot;auto&quot; data-full-width-responsive=&quot;true&quot;&gt;&lt;/ins&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 style=&quot;box-sizing: border-box; border-width: 1px 10px; border-bottom-style: solid; border-bottom-color: #000000; border-left-style: solid; border-left-color: #000000; letter-spacing: -1px; padding: 5px; margin: 5px 0px; line-height: 1;&quot; data-ke-size=&quot;size21&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;&amp;nbsp;본 테스트&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;ㅁ delete 30만건&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1704333972038&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kim=# delete from test where i between 300000 and 599999;

kim=# select count(*) from test;
count  
--------
700000
(1 row)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;ㅁ vacuum 대상 확인&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1704334021463&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kim=# select schemaname, relname, n_dead_tup from pg_stat_user_tables where n_dead_tup &amp;gt; 0 and (last_autovacuum is null or last_autoanalyze is null);
schemaname | relname | n_dead_tup
------------+---------+------------
public     | test    |     300000
(1 row)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;ㅁ vacuum실행 &amp;amp; DML수행&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1704334102919&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;## insert 스크립트 실행
[postgres@localhost ~]$ sh +x kim.sh
#!/bin/bash

for i in {1000001..1300000}
do
psql -U postgres -d kim -c &quot;insert into test values ($i)&quot;
done


## vacuum 수행
kim=# vacuum freeze verbose test;
INFO:  vacuuming &quot;public.test&quot;
INFO:  &quot;test&quot;: removed 9 row versions in 1328 pages
INFO:  &quot;test&quot;: found 9 removable, 701405 nonremovable row versions in 4431 out of 4431 pages
DETAIL:  0 dead row versions cannot be removed yet.
There were 0 unused item pointers.
Skipped 0 pages due to buffer pins.
0 pages are entirely empty.
CPU 0.13s/0.07u sec elapsed 0.25 sec.
INFO:  vacuuming &quot;pg_toast.pg_toast_16385&quot;
INFO:  index &quot;pg_toast_16385_index&quot; now contains 0 row versions in 1 pages
DETAIL:  0 index row versions were removed.
0 index pages have been deleted, 0 are currently reusable.
CPU 0.00s/0.00u sec elapsed 0.00 sec.
INFO:  &quot;pg_toast_16385&quot;: found 0 removable, 0 nonremovable row versions in 0 out of 0 pages
DETAIL:  0 dead row versions cannot be removed yet.
There were 0 unused item pointers.
Skipped 0 pages due to buffer pins.
0 pages are entirely empty.
CPU 0.00s/0.00u sec elapsed 0.00 sec.
VACUUM&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;ㅁ dead tuple 삭제 확인&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1704334133774&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kim=# select schemaname, relname, n_dead_tup from pg_stat_user_tables where n_dead_tup &amp;gt; 0 and (last_autovacuum is null or last_autoanalyze is null);
schemaname | relname | n_dead_tup
------------+---------+------------
(0 rows)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;ㅁ 테스트 결과&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- vacuum full이 아닌 일반 vacuum 수행시 DDL은 불가하며 select, DML은 lock없이 가능합니다.&lt;/p&gt;</description>
      <category>DataBase/PostgreSQL</category>
      <author>jeonghyun</author>
      <guid isPermaLink="true">https://jhdatabase.tistory.com/195</guid>
      <comments>https://jhdatabase.tistory.com/entry/PostgreSQL-Vacuum-Lock-%ED%99%95%EC%9D%B8#entry195comment</comments>
      <pubDate>Thu, 4 Jan 2024 11:15:17 +0900</pubDate>
    </item>
    <item>
      <title>[Oracle - PostgreSQL to Oracle DBLink] use. FDW</title>
      <link>https://jhdatabase.tistory.com/entry/Oracle-PostgreSQL-to-Oracle-DBLink-use-FDW</link>
      <description>&lt;div&gt;&lt;span&gt;&lt;/span&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;Oracle FDW란.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;Postgresql 에서 Oracle에 있는 데이터를 가져오기 위해서는 FDW를 이용할 수 있다. FDW는 Foreign Data Wrapper 의 약자로 이기종 데이터베이스의 외래테이블 간에 연결하여 사용할 수 있는 솔루션이다.&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;테스트 환경&amp;nbsp;&lt;br /&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;/div&gt;
&lt;div&gt;postgresql : 13.7&lt;/div&gt;
&lt;div&gt;Oracle : 11.2.0.4&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;※ oracle 부분 확인 필요 사항&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;오라클 클라이언트 다운로드가 필요(zip 파일) - 오라클 계정 필요&lt;/div&gt;
&lt;div&gt;오라클 서버와 버전이 맞는 버전을 사용하는 것이 좋음(이슈 관련)&lt;/div&gt;
&lt;div&gt;32비트 오라클 서버와 64비트 PostgreSQL 서버는 동작 불가.(동일한 bit의 프로그램 필요)&lt;/div&gt;
&lt;div&gt;#SELECT * FROM v$version; 로 oracle 버전 정보 확인&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;----------Oracle client version 11.2 or better is required.---------- oracle_fdw 2.3.0버전 기준&lt;/div&gt;
&lt;div&gt;그 외 호환 버전 정보는 Matrix in support document 207303.1 문서 참조&lt;/div&gt;
&lt;div&gt;호환 Matrix에서는 최신 버전이 아닌 oracle 버전의 호환성에 대해 확인해주지 않는다는 점은 감안하여야 한다.&lt;/div&gt;
&lt;div&gt;oracle_fdw 2.2.0 버전 기준 oracle client 10.2버전은 지원하지 않는다.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;--SID값으로 Service_name값 확인하기, 확인한 Service_name값으로 foreign server 설정값에 넣어주면 된다.&lt;/div&gt;
&lt;div&gt;select value from v$parameter where name='&amp;lt;sid값&amp;gt;';&lt;/div&gt;
&lt;div&gt;-------------------------&lt;/div&gt;
&lt;div&gt;ORCLCDB.localdomain&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ oracle fdw 파일 설치 (pg)&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;가장 최신 버전인 2.5로 설치 진행. oracle client와 호환 버전 체킹 필요&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://github.com/laurenz/oracle_fdw/releases/tag/ORACLE_FDW_1_3_0&quot;&gt;https://github.com/laurenz/oracle_fdw/releases/tag/ORACLE_FDW_1_3_0&lt;/a&gt;
&lt;figure id=&quot;og_1684986148956&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;Release Release 1.3.0 &amp;middot; laurenz/oracle_fdw&quot; data-og-description=&quot;Enhancements: Add support for IMPORT FOREIGN SCHEMA for PostgreSQL 9.5 and higher. Improve cost estimates by using the row count estimate. Inspiration by Daniele Sevegnani. Support two-dimensional...&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/laurenz/oracle_fdw/releases/tag/ORACLE_FDW_1_3_0&quot; data-og-url=&quot;https://github.com/laurenz/oracle_fdw/releases/tag/ORACLE_FDW_1_3_0&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/l4BuQ/hySKyo7VJQ/A6bYjk9CzBLoCIK2QmKsp1/img.png?width=1200&amp;amp;height=600&amp;amp;face=97_148_1060_516&quot;&gt;&lt;a href=&quot;https://github.com/laurenz/oracle_fdw/releases/tag/ORACLE_FDW_1_3_0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/laurenz/oracle_fdw/releases/tag/ORACLE_FDW_1_3_0&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/l4BuQ/hySKyo7VJQ/A6bYjk9CzBLoCIK2QmKsp1/img.png?width=1200&amp;amp;height=600&amp;amp;face=97_148_1060_516');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Release Release 1.3.0 &amp;middot; laurenz/oracle_fdw&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Enhancements: Add support for IMPORT FOREIGN SCHEMA for PostgreSQL 9.5 and higher. Improve cost estimates by using the row count estimate. Inspiration by Daniele Sevegnani. Support two-dimensional...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://github.com/laurenz/oracle_fdw/releases&quot;&gt;https://github.com/laurenz/oracle_fdw/releases&lt;/a&gt;
&lt;figure id=&quot;og_1684986150513&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;Releases &amp;middot; laurenz/oracle_fdw&quot; data-og-description=&quot;PostgreSQL Foreign Data Wrapper for Oracle. Contribute to laurenz/oracle_fdw development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/laurenz/oracle_fdw/releases&quot; data-og-url=&quot;https://github.com/laurenz/oracle_fdw/releases&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/BXJLU/hySKs3wJ4W/R5w3lDiBBKW6evxXgbdjak/img.png?width=1200&amp;amp;height=600&amp;amp;face=965_148_1060_253&quot;&gt;&lt;a href=&quot;https://github.com/laurenz/oracle_fdw/releases&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/laurenz/oracle_fdw/releases&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/BXJLU/hySKs3wJ4W/R5w3lDiBBKW6evxXgbdjak/img.png?width=1200&amp;amp;height=600&amp;amp;face=965_148_1060_253');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Releases &amp;middot; laurenz/oracle_fdw&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;PostgreSQL Foreign Data Wrapper for Oracle. Contribute to laurenz/oracle_fdw development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;pre id=&quot;code_1684986156730&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@jh-post ~]# wget https://github.com/laurenz/oracle_fdw/archive/refs/tags/ORACLE_FDW_2_5_0.tar.gz&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ oracle basic, sdk 설치 (pg)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html&quot;&gt;https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html&lt;/a&gt;
&lt;figure id=&quot;og_1684986164816&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Instant Client for Linux x86-64 (64-bit)&quot; data-og-description=&quot;Base - one of these packages is required Tools - optional packages Development and Runtime - optional packages&quot; data-og-host=&quot;www.oracle.com&quot; data-og-source-url=&quot;https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html&quot; data-og-url=&quot;https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Instant Client for Linux x86-64 (64-bit)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Base - one of these packages is required Tools - optional packages Development and Runtime - optional packages&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.oracle.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;290&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4AVA2/btshiGEQvCZ/SSnCvp05ic6uK0dB3CBZW1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4AVA2/btshiGEQvCZ/SSnCvp05ic6uK0dB3CBZW1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4AVA2/btshiGEQvCZ/SSnCvp05ic6uK0dB3CBZW1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4AVA2%2FbtshiGEQvCZ%2FSSnCvp05ic6uK0dB3CBZW1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; alt=&quot;oracle client 버전&quot; loading=&quot;lazy&quot; width=&quot;900&quot; height=&quot;290&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;290&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;265&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Sgeek/btshlV8FOSa/XtxB4Dto0hKE94J9Vyuk90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Sgeek/btshlV8FOSa/XtxB4Dto0hKE94J9Vyuk90/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Sgeek/btshlV8FOSa/XtxB4Dto0hKE94J9Vyuk90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSgeek%2FbtshlV8FOSa%2FXtxB4Dto0hKE94J9Vyuk90%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; alt=&quot;oracle client 버전 및 필요 패키지&quot; loading=&quot;lazy&quot; width=&quot;900&quot; height=&quot;265&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;265&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1684986218826&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@jh-post ~]# ls -lrt
-rw-r--r-- 1 root root   129108 Mar 20 09:50 oracle_fdw-ORACLE_FDW_2_5_0.tar.gz
-rw-r--r-- 1 root root   643089 Mar 20 09:50 instantclient-sdk-linux.x64-11.2.0.4.0.zip
-rw-r--r-- 1 root root 60704657 Mar 20 09:50 instantclient-basic-linux.x64-11.2.0.4.0.zip&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ 클라이언트 및 sdk 설치&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1684986232196&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@jh-post ~]# unzip instantclient-basic-linux.x64-11.2.0.4.0.zip

[root@jh-post ~]# unzip instantclient-sdk-linux.x64-11.2.0.4.0.zip



## 이후 fdw설치시 에러 발생 방지를 위해 심볼릭링크 생성
[root@jh-post ~]# cd instantclient_11_2/

[root@jh-post instantclient_11_2]# ln -s libclntsh.so.11.1 libclntsh.so



## 환경설정 추가
[root@jh-post ~]# su - postgres

[postgres@jh-post ~]$ vi ~/.bash_profile
POSTGRES_HOME=/mnt/pgsql/13
LD_LIBRARY_PATH=/mnt/pgsql/13/lib:/home/postgres/instantclient_11_2
#LD_LIBRARY_PATH=/home/postgres/instantclient_11_2
export ORACLE_HOME=/home/postgres/instantclient_11_2
PGDATA=$POSTGRES_HOME/data
MANPATH=$MANPATH:$POSTGRES_HOME/man

PATH=$POSTGRES_HOME/bin:$PATH:$ORACLE_HOME

export PATH
export POSTGRES_HOME
export PGDATA
export MANPATH
export LD_LIBRARY_PATH&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ Oracle fdw 설치&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1684986252073&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@jh-post ~]# tar -zxvf ORACLE_FDW_2_5_0.tar.gz


[root@jh-post ~]# cd oracle_fdw-ORACLE_FDW_2_5_0

[postgres@jh-post oracle_fdw-ORACLE_FDW_2_5_0]$ make
gcc -std=gnu99 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -O2 -fPIC -I&quot;/home/postgres/instantclient_11_2/sdk/include&quot; -I&quot;/home/postgres/instantclient_11_2/oci/include&quot; -I&quot;/home/postgres/instantclient_11_2/rdbms/public&quot; -I&quot;/home/postgres/instantclient_11_2/&quot;  -I. -I./ -I/mnt/pgsql/13/include/server -I/mnt/pgsql/13/include/internal  -D_GNU_SOURCE   -c -o oracle_fdw.o oracle_fdw.c
gcc -std=gnu99 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -O2 -fPIC -I&quot;/home/postgres/instantclient_11_2/sdk/include&quot; -I&quot;/home/postgres/instantclient_11_2/oci/include&quot; -I&quot;/home/postgres/instantclient_11_2/rdbms/public&quot; -I&quot;/home/postgres/instantclient_11_2/&quot;  -I. -I./ -I/mnt/pgsql/13/include/server -I/mnt/pgsql/13/include/internal  -D_GNU_SOURCE   -c -o oracle_utils.o oracle_utils.c
gcc -std=gnu99 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -O2 -fPIC -I&quot;/home/postgres/instantclient_11_2/sdk/include&quot; -I&quot;/home/postgres/instantclient_11_2/oci/include&quot; -I&quot;/home/postgres/instantclient_11_2/rdbms/public&quot; -I&quot;/home/postgres/instantclient_11_2/&quot;  -I. -I./ -I/mnt/pgsql/13/include/server -I/mnt/pgsql/13/include/internal  -D_GNU_SOURCE   -c -o oracle_gis.o oracle_gis.c
gcc -std=gnu99 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -O2 -fPIC -shared -o oracle_fdw.so oracle_fdw.o oracle_utils.o oracle_gis.o -L/mnt/pgsql/13/lib    -Wl,--as-needed -Wl,-rpath,'/mnt/pgsql/13/lib',--enable-new-dtags  -L&quot;/home/postgres/instantclient_11_2/&quot; -L&quot;/home/postgres/instantclient_11_2/bin&quot; -L&quot;/home/postgres/instantclient_11_2/lib&quot; -L&quot;/home/postgres/instantclient_11_2/lib/amd64&quot;  -lclntsh




[postgres@jh-post oracle_fdw-ORACLE_FDW_2_5_0]$ make install
/usr/bin/mkdir -p '/mnt/pgsql/13/lib'
/usr/bin/mkdir -p '/mnt/pgsql/13/share/extension'
/usr/bin/mkdir -p '/mnt/pgsql/13/share/extension'
/usr/bin/mkdir -p '/mnt/pgsql/13/share/doc/extension'
/usr/bin/install -c -m 755  oracle_fdw.so '/mnt/pgsql/13/lib/oracle_fdw.so'
/usr/bin/install -c -m 644 .//oracle_fdw.control '/mnt/pgsql/13/share/extension/'
/usr/bin/install -c -m 644 .//oracle_fdw--1.2.sql .//oracle_fdw--1.0--1.1.sql .//oracle_fdw--1.1--1.2.sql  '/mnt/pgsql/13/share/extension/'
/usr/bin/install -c -m 644 .//README.oracle_fdw '/mnt/pgsql/13/share/doc/extension/'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ Extension 생성&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1684986267954&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;postgres=# create extension oracle_fdw;
CREATE EXTENSION



postgres=# select * from pg_catalog.pg_available_extensions;
    name    | default_version | installed_version |                comment                 
------------+-----------------+-------------------+----------------------------------------
plpgsql    | 1.0             | 1.0               | PL/pgSQL procedural language
oracle_fdw | 1.2             | 1.2               | foreign data wrapper for Oracle access
(2 rows)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ Oracle client 접속 확인&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1684986284726&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;## Oracle
[oracle@jh-ora admin]$ vi listener.ora

# listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = jh-ora)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

ADR_BASE_LISTENER = /u01/app/oracle






[oracle@jh-ora admin]$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 20-MAR-2023 12:58:26

Copyright (c) 1991, 2013, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=jh-ora)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date                20-MAR-2023 12:57:40
Uptime                    0 days 0 hr. 0 min. 45 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
Listener Log File         /u01/app/oracle/diag/tnslsnr/jh-ora/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=jh-ora)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Services Summary...
Service &quot;orcl&quot; has 1 instance(s).
  Instance &quot;orcl&quot;, status READY, has 1 handler(s) for this service...
Service &quot;orclXDB&quot; has 1 instance(s).
  Instance &quot;orcl&quot;, status READY, has 1 handler(s) for this service...
The command completed successfully



## tnsname
ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.83)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )





## PG 서버에서 접속시도
[postgres@jh-post ~]$ sqlplus kim/kim@192.168.100.84:1521/orcl

SQL*Plus: Release 11.2.0.4.0 Production on Mon Mar 20 12:58:05 2023

Copyright (c) 1982, 2013, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL&amp;gt; Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ pg_hba.conf 수정(PG)&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1684986305547&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[postgres@jh-post data]$ vi pg_hba.conf
host    all     all     192.168.100.0/24        trust&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ Oracle서버에 테스트 데이터 입력(oracle)&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1684986316987&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SQL&amp;gt; create table test (id number, name varchar2(30), addr varchar2(50));

Table created.


SQL&amp;gt; begin
for i in 1..1000 loop
insert into test values(i||i,'kim'||i,'addr');
end loop;
end;
/

PL/SQL procedure successfully completed.



##
SQL&amp;gt; select * from kim.test where rownum &amp;lt; = 10;

    ID NAME               ADDR
---------- ------------------------------ --------------------------------------------------
    11 kim1               addr
    22 kim2               addr
    33 kim3               addr
    44 kim4               addr
    55 kim5               addr
    66 kim6               addr
    77 kim7               addr
    88 kim8               addr
    99 kim9               addr
      1010 kim10              addr

10 rows selected.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ Oracle 데이터베이스 연결서버 생성(PG)&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1684986335302&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;postgres=# create server ora11g foreign data wrapper oracle_fdw options(dbserver '//192.168.100.84:1521/orcl');
CREATE SERVER



## dblink 유저 생성
postgres=# create user kim password 'kim' login;
CREATE ROLE

postgres=# grant usage on foreign server ora11g to kim;
GRANT



## oracle 스키마와 매핑
postgres=# create user mapping for kim server ora11g options(user 'kim',password 'kim');
CREATE USER MAPPING




## 데이터베이스 연결 할 유저로 재접속 후 외래 테이블 생성
[postgres@jh-post data]$ psql -U kim

create foreign table fdw_table(
i numeric,
name text,
addr text
)server ora11g options(schema 'KIM', table 'TEST');
CREATE FOREIGN TABLE




## 외래 테이블 조회
postgres=&amp;gt; select * from fdw_table;
    i     |  name   | addr
----------+---------+------
       11 | kim1    | addr
       22 | kim2    | addr
       33 | kim3    | addr
       44 | kim4    | addr
       55 | kim5    | addr
       66 | kim6    | addr
       77 | kim7    | addr
       88 | kim8    | addr
       99 | kim9    | addr
     1010 | kim10   | addr
     1111 | kim11   | addr
     1212 | kim12   | addr
     1313 | kim13   | addr
     1414 | kim14   | addr
     1515 | kim15   | addr
     1616 | kim16   | addr
     1717 | kim17   | addr
     1818 | kim18   | addr
     1919 | kim19   | addr
     2020 | kim20   | addr
     2121 | kim21   | addr
     2222 | kim22   | addr
     2323 | kim23   | addr
     2424 | kim24   | addr
     2525 | kim25   | addr
     2626 | kim26   | addr
...&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ 외래 테이블 조회&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1684986349416&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;select srvname as name,
srvowner::regrole as owner,
fdwname as wrapper,
srvoptions as options
from pg_foreign_server
join pg_foreign_data_wrapper w
on w.oid = srvfdw;

  name  |  owner   |  wrapper   |                options                
--------+----------+------------+---------------------------------------
ora11g | postgres | oracle_fdw | {dbserver=//192.168.100.84:1521/orcl}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;참고&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;a href=&quot;https://positivemh.tistory.com/478&quot;&gt;https://positivemh.tistory.com/478&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1684986381690&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;PostgreSQL 10, oracle fdw extension 으로 오라클 DB와 연결(dblink) 정리&quot; data-og-description=&quot;OS환경 : Oracle Linux 7.6 (64bit) DB 환경 : PostgreSQL 10, Oracle Database 11.2.0.4 방법 : PostgreSQL 10, oracle fdw extension 으로 오라클 DB와 연결(dblink)postgresql에서 oracle database 로 연결하는 방법을 설명함postgresql이 설&quot; data-og-host=&quot;positivemh.tistory.com&quot; data-og-source-url=&quot;https://positivemh.tistory.com/478&quot; data-og-url=&quot;https://positivemh.tistory.com/478&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bhAw7C/hySKHl3MlZ/Lz7p9nfK4T2reoouHYKP5K/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/leWRc/hySKF2RjXG/DY9yeIxTG9SwMujsULbXUk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://positivemh.tistory.com/478&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://positivemh.tistory.com/478&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bhAw7C/hySKHl3MlZ/Lz7p9nfK4T2reoouHYKP5K/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/leWRc/hySKF2RjXG/DY9yeIxTG9SwMujsULbXUk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;PostgreSQL 10, oracle fdw extension 으로 오라클 DB와 연결(dblink) 정리&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;OS환경 : Oracle Linux 7.6 (64bit) DB 환경 : PostgreSQL 10, Oracle Database 11.2.0.4 방법 : PostgreSQL 10, oracle fdw extension 으로 오라클 DB와 연결(dblink)postgresql에서 oracle database 로 연결하는 방법을 설명함postgresql이 설&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;positivemh.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>DataBase/Oracle</category>
      <category>dblink</category>
      <category>fdw</category>
      <category>oracle</category>
      <category>PostgreSQL</category>
      <author>jeonghyun</author>
      <guid isPermaLink="true">https://jhdatabase.tistory.com/146</guid>
      <comments>https://jhdatabase.tistory.com/entry/Oracle-PostgreSQL-to-Oracle-DBLink-use-FDW#entry146comment</comments>
      <pubDate>Thu, 25 May 2023 12:47:44 +0900</pubDate>
    </item>
    <item>
      <title>[Oracle - 리눅스 서버에서 RDS 접속 방법] use. oracle client</title>
      <link>https://jhdatabase.tistory.com/entry/Oracle-%EB%A6%AC%EB%88%85%EC%8A%A4-%EC%84%9C%EB%B2%84%EC%97%90%EC%84%9C-RDS-%EC%A0%91%EC%86%8D-%EB%B0%A9%EB%B2%95-use-oracle-client</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;■ Oracle버전에 맞는 client 다운로드&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;basic &amp;amp; sqlplus&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html&quot;&gt;https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1684977693239&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Instant Client for Linux x86-64 (64-bit)&quot; data-og-description=&quot;Base - one of these packages is required Tools - optional packages Development and Runtime - optional packages&quot; data-og-host=&quot;www.oracle.com&quot; data-og-source-url=&quot;https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html&quot; data-og-url=&quot;https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Instant Client for Linux x86-64 (64-bit)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Base - one of these packages is required Tools - optional packages Development and Runtime - optional packages&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.oracle.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1531&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d0INd0/btshiafanhP/8jp8qHU2ROMc8rRiWLlw10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d0INd0/btshiafanhP/8jp8qHU2ROMc8rRiWLlw10/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d0INd0/btshiafanhP/8jp8qHU2ROMc8rRiWLlw10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd0INd0%2FbtshiafanhP%2F8jp8qHU2ROMc8rRiWLlw10%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2000&quot; height=&quot;1531&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1531&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1684977724756&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@ip-172-31-38-100 ~]# wget https://download.oracle.com/otn_software/linux/instantclient/1919000/oracle-instantclient19.19-basic-19.19.0.0.0-1.x86_64.rpm
--2023-04-27 03:41:02--  https://download.oracle.com/otn_software/linux/instantclient/1919000/oracle-instantclient19.19-basic-19.19.0.0.0-1.x86_64.rpm
Resolving download.oracle.com (download.oracle.com)... 23.45.56.109
Connecting to download.oracle.com (download.oracle.com)|23.45.56.109|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 53553372 (51M) [application/x-redhat-package-manager]
Saving to: &amp;lsquo;oracle-instantclient19.19-basic-19.19.0.0.0-1.x86_64.rpm&amp;rsquo;

oracle-instantclient19.19-bas 100%[==============================================&amp;gt;]  51.07M  37.0MB/s    in 1.4s    

2023-04-27 03:41:04 (37.0 MB/s) - &amp;lsquo;oracle-instantclient19.19-basic-19.19.0.0.0-1.x86_64.rpm&amp;rsquo; saved [53553372/53553372]





[root@ip-172-31-38-100 ~]# wget https://download.oracle.com/otn_software/linux/instantclient/1919000/oracle-instantclient19.19-sqlplus-19.19.0.0.0-1.x86_64.rpm
--2023-04-27 03:41:11--  https://download.oracle.com/otn_software/linux/instantclient/1919000/oracle-instantclient19.19-sqlplus-19.19.0.0.0-1.x86_64.rpm
Resolving download.oracle.com (download.oracle.com)... 23.45.56.109
Connecting to download.oracle.com (download.oracle.com)|23.45.56.109|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 703388 (687K) [application/x-redhat-package-manager]
Saving to: &amp;lsquo;oracle-instantclient19.19-sqlplus-19.19.0.0.0-1.x86_64.rpm&amp;rsquo;

oracle-instantclient19.19-sql 100%[==============================================&amp;gt;] 686.90K  3.33MB/s    in 0.2s    

2023-04-27 03:41:11 (3.33 MB/s) - &amp;lsquo;oracle-instantclient19.19-sqlplus-19.19.0.0.0-1.x86_64.rpm&amp;rsquo; saved [703388/703388]





[root@ip-172-31-38-100 ~]# yum -y install oracle-instantclient19.19-basic-19.19.0.0.0-1.x86_64.rpm
[root@ip-172-31-38-100 ~]# yum -y install oracle-instantclient19.19-sqlplus-19.19.0.0.0-1.x86_64.rpm&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span data-token-index=&quot;0&quot;&gt;■ $ORACLE_HOME , $TNS_ADMIN 추가&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1684977756992&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@ip-~]# vi /etc/profile.d/oracle.sh

export ORACLE_HOME=/usr/lib/oracle/19.19/client64
export TNS_ADMIN=/usr/lib/oracle/19.19/client64/bin&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span data-token-index=&quot;0&quot;&gt;■ tnsnames.ora 설정 &amp;amp; 접속&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1684977770484&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@ip-172-31-47-148 ~]# vi /usr/lib/oracle/19.19/client64/bin/tnsnames.ora

ORCL =                                                                    
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = kimjeonghyun.clb8vfq4410k.ap-northeast-2.rds.amazonaws.com)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )





[root@ip-172-31-47-148 ~]# sqlplus admin/&amp;lt;비밀번호&amp;gt;@ORCL
SQL*Plus: Release 19.0.0.0.0 - Production on Thu May 25 01:18:18 2023
Version 19.19.0.0.0

Copyright (c) 1982, 2022, Oracle.  All rights reserved.

Last Successful login time: Thu May 25 2023 00:55:55 +00:00

Connected to:
Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production
Version 19.19.0.0.0

SQL&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span data-token-index=&quot;0&quot;&gt;■ client 접속 2&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1684977786548&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@ip-172-31-38-100 bin]# sqlplus 'admin@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=kjh-db.clb8vfq4410k.ap-northeastCT_DATA=(SID=DATABASE)))'
SQL*Plus: Release 19.0.0.0.0 - Production on Thu Apr 27 03:49:40 2023

Version 19.19.0.0.0

Copyright (c) 1982, 2022, Oracle.  All rights reserved.

Enter password: &amp;lt;비밀번호 입력&amp;gt;

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.18.0.0.0

SQL&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>DataBase/Oracle</category>
      <category>client</category>
      <category>oracle</category>
      <category>RDS</category>
      <author>jeonghyun</author>
      <guid isPermaLink="true">https://jhdatabase.tistory.com/145</guid>
      <comments>https://jhdatabase.tistory.com/entry/Oracle-%EB%A6%AC%EB%88%85%EC%8A%A4-%EC%84%9C%EB%B2%84%EC%97%90%EC%84%9C-RDS-%EC%A0%91%EC%86%8D-%EB%B0%A9%EB%B2%95-use-oracle-client#entry145comment</comments>
      <pubDate>Thu, 25 May 2023 10:24:09 +0900</pubDate>
    </item>
    <item>
      <title>[AWS - RDS(Aurora MySQL) 데이터 이관] use. S3</title>
      <link>https://jhdatabase.tistory.com/entry/AWS-RDSAurora-MySQL-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%9D%B4%EA%B4%80-use-S3</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;RDS(Aurora MySQL)&amp;nbsp;-&amp;gt; S3버킷으로 데이터 로드하는 과정과 반대로 S3 -&amp;gt; RDS(Aurora MySQL)로 데이터 로드 하는 테스트를 해보았습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;사전 테스트 준비&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt;&lt;span data-token-index=&quot;0&quot;&gt;■ Test Data&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1684911534489&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; select * from name;
+------+------+
| a    | b    |
+------+------+
|    1 | 김   |
|    2 | 정   |
|    3 | 현   |
+------+------+
3 rows in set (0.00 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span data-token-index=&quot;0&quot;&gt;■ Dump export&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1684911558060&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@ip-172-31-47-148 ~]# mysqldump -uroot -proot --single-transaction --databases kim &amp;gt; kim.sql&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span data-token-index=&quot;0&quot;&gt;■ 덤프파일 S3에 업로드&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;856&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cKFhbc/btshc5rmaeM/R9Yd3fCIZkbi6TVWto4IC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cKFhbc/btshc5rmaeM/R9Yd3fCIZkbi6TVWto4IC0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cKFhbc/btshc5rmaeM/R9Yd3fCIZkbi6TVWto4IC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcKFhbc%2Fbtshc5rmaeM%2FR9Yd3fCIZkbi6TVWto4IC0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2000&quot; height=&quot;856&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;856&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span data-token-index=&quot;0&quot;&gt;■ RDS - S3 연동&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span data-token-index=&quot;0&quot;&gt;RDS와 S3연동 방법 URL : &lt;/span&gt;&lt;/b&gt;&lt;span data-token-index=&quot;0&quot;&gt;&lt;a href=&quot;https://jhdatabase.tistory.com/143&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://jhdatabase.tistory.com/143&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1684911608479&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[AWS - RDS(Aurora MySQL) 와 S3 연동]&quot; data-og-description=&quot;■ S3 버킷 생성 모든 퍼블릭 액세스 차단으로 설정돼있는데 차단하면 안될거같다.. ■ IAM 정책 생성 ■ IAM 역할 생성 ■ 이전에 생성한 정책 추가 ■ RDS에 S3통합 옵션 추가 ■ Aurora MySQL에서 데이&quot; data-og-host=&quot;jhdatabase.tistory.com&quot; data-og-source-url=&quot;https://jhdatabase.tistory.com/143&quot; data-og-url=&quot;https://jhdatabase.tistory.com/143&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/oFscD/hySJlxqkJ9/xayflx1Gk82k9dA6eoaE50/img.png?width=800&amp;amp;height=420&amp;amp;face=0_0_800_420,https://scrap.kakaocdn.net/dn/bfmyWO/hySKGGGXoC/C18ddxZYj20kQ1MCE0oCLK/img.png?width=800&amp;amp;height=420&amp;amp;face=0_0_800_420,https://scrap.kakaocdn.net/dn/bdQjMn/hySKDwr9N9/T1by53bbKnqDE8CVncaND1/img.png?width=2000&amp;amp;height=1850&amp;amp;face=0_0_2000_1850&quot;&gt;&lt;a href=&quot;https://jhdatabase.tistory.com/143&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://jhdatabase.tistory.com/143&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/oFscD/hySJlxqkJ9/xayflx1Gk82k9dA6eoaE50/img.png?width=800&amp;amp;height=420&amp;amp;face=0_0_800_420,https://scrap.kakaocdn.net/dn/bfmyWO/hySKGGGXoC/C18ddxZYj20kQ1MCE0oCLK/img.png?width=800&amp;amp;height=420&amp;amp;face=0_0_800_420,https://scrap.kakaocdn.net/dn/bdQjMn/hySKDwr9N9/T1by53bbKnqDE8CVncaND1/img.png?width=2000&amp;amp;height=1850&amp;amp;face=0_0_2000_1850');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[AWS - RDS(Aurora MySQL) 와 S3 연동]&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;■ S3 버킷 생성 모든 퍼블릭 액세스 차단으로 설정돼있는데 차단하면 안될거같다.. ■ IAM 정책 생성 ■ IAM 역할 생성 ■ 이전에 생성한 정책 추가 ■ RDS에 S3통합 옵션 추가 ■ Aurora MySQL에서 데이&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;jhdatabase.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;S3 -&amp;gt; RDS 데이터 로드&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;■ TO-BE에 기존 테이블 메타데이터 생성&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt;AS-IS&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1684911677094&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; show create table name;
+-------+------------------------------------------------------------------------------------------------------------------------------
| Table | Create Table                                                                                                                 
+-------+------------------------------------------------------------------------------------------------------------------------------
| name  | CREATE TABLE `name` (
  `a` int DEFAULT NULL,
  `b` varchar(40) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
+-------+------------------------------------------------------------------------------------------------------------------------------
1 row in set (0.00 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span data-token-index=&quot;0&quot;&gt;&amp;lt;TO-BE&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1684911691439&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE TABLE `name` (
  `a` int DEFAULT NULL,
  `b` varchar(40) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span data-token-index=&quot;0&quot;&gt;■ Import&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1684911709672&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;LOAD DATA FROM S3 's3://kimjeonghyun/name.csv' INTO TABLE name
FIELDS TERMINATED BY '\,'
LINES TERMINATED BY '\r\n'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span data-token-index=&quot;0&quot;&gt;■ 데이터 조회&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1092&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZlCT3/btshi6a6QIz/t5xuz7C5AotJM2ppYRiZrk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZlCT3/btshi6a6QIz/t5xuz7C5AotJM2ppYRiZrk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZlCT3/btshi6a6QIz/t5xuz7C5AotJM2ppYRiZrk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZlCT3%2Fbtshi6a6QIz%2Ft5xuz7C5AotJM2ppYRiZrk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2000&quot; height=&quot;1092&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1092&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;RDS -&amp;gt; S3 데이터 추출&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span data-token-index=&quot;0&quot;&gt;■ Test Data&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;834&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c87zgk/btshb6D3lPo/04XFeBBbXjg64D0BKDRD8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c87zgk/btshb6D3lPo/04XFeBBbXjg64D0BKDRD8K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c87zgk/btshb6D3lPo/04XFeBBbXjg64D0BKDRD8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc87zgk%2Fbtshb6D3lPo%2F04XFeBBbXjg64D0BKDRD8K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2000&quot; height=&quot;834&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;834&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span data-token-index=&quot;0&quot;&gt;■ S3로 csv 파일 전송&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1684911771819&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT * FROM kim 
INTO OUTFILE S3 's3://kimjeonghyun/kim.csv'
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span data-token-index=&quot;0&quot;&gt;■ 버킷 조회&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;978&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FDtcH/btshcfHpEgv/shnV0eioYwxZyZ53cbFcQk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FDtcH/btshcfHpEgv/shnV0eioYwxZyZ53cbFcQk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FDtcH/btshcfHpEgv/shnV0eioYwxZyZ53cbFcQk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFDtcH%2FbtshcfHpEgv%2FshnV0eioYwxZyZ53cbFcQk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2000&quot; height=&quot;978&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;978&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Cloud/AWS(Amazon Web Service)</category>
      <category>AWS</category>
      <category>RDS</category>
      <category>S3</category>
      <category>데이터 이관</category>
      <author>jeonghyun</author>
      <guid isPermaLink="true">https://jhdatabase.tistory.com/144</guid>
      <comments>https://jhdatabase.tistory.com/entry/AWS-RDSAurora-MySQL-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%9D%B4%EA%B4%80-use-S3#entry144comment</comments>
      <pubDate>Wed, 24 May 2023 16:03:21 +0900</pubDate>
    </item>
    <item>
      <title>[AWS - RDS(Aurora MySQL) 와 S3 연동]</title>
      <link>https://jhdatabase.tistory.com/entry/AWS-RDSAurora-MySQL-%EC%99%80-S3-%EC%97%B0%EB%8F%99</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span data-token-index=&quot;0&quot;&gt;■ S3 버킷 생성&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1679&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5hYk5/btsg9Oqduqd/phDCEbH06MXk4tOE4Pgyz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5hYk5/btsg9Oqduqd/phDCEbH06MXk4tOE4Pgyz1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5hYk5/btsg9Oqduqd/phDCEbH06MXk4tOE4Pgyz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5hYk5%2Fbtsg9Oqduqd%2FphDCEbH06MXk4tOE4Pgyz1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2000&quot; height=&quot;1679&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1679&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span data-token-index=&quot;0&quot;&gt;모든 퍼블릭 액세스 차단으로 설정돼있는데 차단하면 안될거같다..&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;2172&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SFMfF/btshgoc06A0/VGJH74efeXPmHCKD1uZGd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SFMfF/btshgoc06A0/VGJH74efeXPmHCKD1uZGd1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SFMfF/btshgoc06A0/VGJH74efeXPmHCKD1uZGd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSFMfF%2Fbtshgoc06A0%2FVGJH74efeXPmHCKD1uZGd1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2000&quot; height=&quot;2172&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;2172&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span data-token-index=&quot;0&quot;&gt;■ IAM 정책 생성&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;990&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2m0vj/btshi714hy1/PkzHvIQdTrddFqd9miY1XK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2m0vj/btshi714hy1/PkzHvIQdTrddFqd9miY1XK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2m0vj/btshi714hy1/PkzHvIQdTrddFqd9miY1XK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2m0vj%2Fbtshi714hy1%2FPkzHvIQdTrddFqd9miY1XK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2000&quot; height=&quot;990&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;990&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1137&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/baGwoP/btshaU45OP1/9eR6rV2qbghj4uHjfyr70k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/baGwoP/btshaU45OP1/9eR6rV2qbghj4uHjfyr70k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/baGwoP/btshaU45OP1/9eR6rV2qbghj4uHjfyr70k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbaGwoP%2FbtshaU45OP1%2F9eR6rV2qbghj4uHjfyr70k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2000&quot; height=&quot;1137&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1137&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;911&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bMch2b/btshbtTJzaY/KKZEdSK2OixVqyu3F2eGmk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bMch2b/btshbtTJzaY/KKZEdSK2OixVqyu3F2eGmk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMch2b/btshbtTJzaY/KKZEdSK2OixVqyu3F2eGmk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMch2b%2FbtshbtTJzaY%2FKKZEdSK2OixVqyu3F2eGmk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2000&quot; height=&quot;911&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;911&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span data-token-index=&quot;0&quot;&gt;■ IAM 역할 생성&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1885&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0Kgzo/btshi7gGM4a/E3wvNqKWtwsUZ9cBuLdgVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0Kgzo/btshi7gGM4a/E3wvNqKWtwsUZ9cBuLdgVk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0Kgzo/btshi7gGM4a/E3wvNqKWtwsUZ9cBuLdgVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0Kgzo%2Fbtshi7gGM4a%2FE3wvNqKWtwsUZ9cBuLdgVk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2000&quot; height=&quot;1885&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1885&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span data-token-index=&quot;0&quot;&gt;■ 이전에 생성한 정책 추가&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1091&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAudTm/btshh8AHUWp/zBRXx3CBDdUSm6wi6IIZu1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAudTm/btshh8AHUWp/zBRXx3CBDdUSm6wi6IIZu1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAudTm/btshh8AHUWp/zBRXx3CBDdUSm6wi6IIZu1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAudTm%2Fbtshh8AHUWp%2FzBRXx3CBDdUSm6wi6IIZu1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2000&quot; height=&quot;1091&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1091&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1850&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SQgaW/btshi7OxxOO/kB1PTJXaqvp8zfq8q03kX0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SQgaW/btshi7OxxOO/kB1PTJXaqvp8zfq8q03kX0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SQgaW/btshi7OxxOO/kB1PTJXaqvp8zfq8q03kX0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSQgaW%2Fbtshi7OxxOO%2FkB1PTJXaqvp8zfq8q03kX0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2000&quot; height=&quot;1850&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1850&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span data-token-index=&quot;0&quot;&gt;■ RDS에 S3통합 옵션 추가&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;947&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rtuJZ/btshc6p9Kod/5KJPyb4ECtSb0RVIFgIwC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rtuJZ/btshc6p9Kod/5KJPyb4ECtSb0RVIFgIwC1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rtuJZ/btshc6p9Kod/5KJPyb4ECtSb0RVIFgIwC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrtuJZ%2Fbtshc6p9Kod%2F5KJPyb4ECtSb0RVIFgIwC1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2000&quot; height=&quot;947&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;947&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;■ Aurora MySQL에서 데이터 저장 권한 부여&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Integrating.SaveIntoS3.html&quot;&gt;https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Integrating.SaveIntoS3.html&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;admin유저에게는 default로 S3명령어 권한이 부여된다. 다른 user들에게는 권한을 부여해야함.&lt;/p&gt;
&lt;pre id=&quot;code_1684909921654&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;GRANT SELECT INTO S3 ON *.* TO 'kim'@'%';
GRANT LOAD FROM S3 ON *.* TO 'kim'@'%';&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span data-token-index=&quot;0&quot;&gt;■ S3 &amp;rarr; RDS 데이터 import&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1684909933799&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;## 데이터 load 쿼리
LOAD DATA FROM S3 's3://kimjeonghyun/tt.csv' INTO TABLE test
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Cloud/AWS(Amazon Web Service)</category>
      <category>AWS</category>
      <category>RDS</category>
      <category>S3</category>
      <category>연동</category>
      <author>jeonghyun</author>
      <guid isPermaLink="true">https://jhdatabase.tistory.com/143</guid>
      <comments>https://jhdatabase.tistory.com/entry/AWS-RDSAurora-MySQL-%EC%99%80-S3-%EC%97%B0%EB%8F%99#entry143comment</comments>
      <pubDate>Wed, 24 May 2023 15:32:47 +0900</pubDate>
    </item>
    <item>
      <title>[AWS - Role 전환 설정]</title>
      <link>https://jhdatabase.tistory.com/entry/AWS-Role-%EC%A0%84%ED%99%98-%EC%84%A4%EC%A0%95</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;AWS관리자 계정에서 다른 관리대상 계정에 접속하기 위해 cross-account access를 설정하여 로그아웃-&amp;gt;로그인을 하는 번거로움을 없애고 Role전환하며 편하게 관리할&amp;nbsp; 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;■ 새로운 역할 구성&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AWS 관리 콘솔 &amp;gt; IAM &amp;gt; 역할 &amp;gt; 역할만들기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1329&quot; data-origin-height=&quot;974&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKgAWN/btshbt6oCCt/M6luoqX8DA3K0vvdKvhWwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKgAWN/btshbt6oCCt/M6luoqX8DA3K0vvdKvhWwk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKgAWN/btshbt6oCCt/M6luoqX8DA3K0vvdKvhWwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKgAWN%2Fbtshbt6oCCt%2FM6luoqX8DA3K0vvdKvhWwk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1329&quot; height=&quot;974&quot; data-origin-width=&quot;1329&quot; data-origin-height=&quot;974&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;■ Administrator Access 선택&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;2045&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Pshpz/btshaUXwuMD/NYYgHG9uik2ygsOtIJN201/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Pshpz/btshaUXwuMD/NYYgHG9uik2ygsOtIJN201/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Pshpz/btshaUXwuMD/NYYgHG9uik2ygsOtIJN201/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPshpz%2FbtshaUXwuMD%2FNYYgHG9uik2ygsOtIJN201%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2000&quot; height=&quot;2045&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;2045&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1357&quot; data-origin-height=&quot;1593&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEWsf3/btsg9NjI9xF/z0JKa2Nf4HsjLuE4FkcTXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEWsf3/btsg9NjI9xF/z0JKa2Nf4HsjLuE4FkcTXK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEWsf3/btsg9NjI9xF/z0JKa2Nf4HsjLuE4FkcTXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEWsf3%2Fbtsg9NjI9xF%2Fz0JKa2Nf4HsjLuE4FkcTXK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1357&quot; height=&quot;1593&quot; data-origin-width=&quot;1357&quot; data-origin-height=&quot;1593&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span data-token-index=&quot;0&quot;&gt;■ 정책 생성&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1882&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mqOMh/btshasTWDs7/UaDll0tkYjlYTuyiRCtdj1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mqOMh/btshasTWDs7/UaDll0tkYjlYTuyiRCtdj1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mqOMh/btshasTWDs7/UaDll0tkYjlYTuyiRCtdj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmqOMh%2FbtshasTWDs7%2FUaDll0tkYjlYTuyiRCtdj1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2000&quot; height=&quot;1882&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1882&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1927&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dTB3ya/btsg8bFKX5A/9o0HuuSmRvTk4obCG6Urp0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dTB3ya/btsg8bFKX5A/9o0HuuSmRvTk4obCG6Urp0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dTB3ya/btsg8bFKX5A/9o0HuuSmRvTk4obCG6Urp0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdTB3ya%2Fbtsg8bFKX5A%2F9o0HuuSmRvTk4obCG6Urp0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2000&quot; height=&quot;1927&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1927&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span data-token-index=&quot;0&quot;&gt;■ 사용자 생성&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1598&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bf7i28/btsg96qss4R/kx4fWNbE6eqKiRKh2f7AdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bf7i28/btsg96qss4R/kx4fWNbE6eqKiRKh2f7AdK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bf7i28/btsg96qss4R/kx4fWNbE6eqKiRKh2f7AdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbf7i28%2Fbtsg96qss4R%2Fkx4fWNbE6eqKiRKh2f7AdK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2000&quot; height=&quot;1598&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1598&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1532&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUb19u/btsg9CXyKQs/xGqw1NL1Xlzk18xspE6Y0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUb19u/btsg9CXyKQs/xGqw1NL1Xlzk18xspE6Y0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUb19u/btsg9CXyKQs/xGqw1NL1Xlzk18xspE6Y0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUb19u%2Fbtsg9CXyKQs%2FxGqw1NL1Xlzk18xspE6Y0K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2000&quot; height=&quot;1532&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1532&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span data-token-index=&quot;0&quot;&gt;■ 사용자 재로그인 후 역할 전환&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;2239&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/s4tOq/btsg9u57zEW/kkAa4EYHXSHVv7cwMwu8lk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/s4tOq/btsg9u57zEW/kkAa4EYHXSHVv7cwMwu8lk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/s4tOq/btsg9u57zEW/kkAa4EYHXSHVv7cwMwu8lk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fs4tOq%2Fbtsg9u57zEW%2FkkAa4EYHXSHVv7cwMwu8lk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;472&quot; height=&quot;528&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;2239&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;955&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brbXGV/btsg97iLe5J/0rekCV76tTOIhfeAAK8gv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brbXGV/btsg97iLe5J/0rekCV76tTOIhfeAAK8gv0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brbXGV/btsg97iLe5J/0rekCV76tTOIhfeAAK8gv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrbXGV%2Fbtsg97iLe5J%2F0rekCV76tTOIhfeAAK8gv0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2000&quot; height=&quot;955&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;955&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;2228&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cc3Wb8/btshhHv3wWE/D4ceJJ9wgzorm9bQfZ7O3K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cc3Wb8/btshhHv3wWE/D4ceJJ9wgzorm9bQfZ7O3K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cc3Wb8/btshhHv3wWE/D4ceJJ9wgzorm9bQfZ7O3K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcc3Wb8%2FbtshhHv3wWE%2FD4ceJJ9wgzorm9bQfZ7O3K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;504&quot; height=&quot;561&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;2228&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span data-token-index=&quot;0&quot;&gt;■ 역할 전환 확인&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1304&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5HTTD/btshc6DbfGB/ZH6nbkP3f9WkBly2194KXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5HTTD/btshc6DbfGB/ZH6nbkP3f9WkBly2194KXK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5HTTD/btshc6DbfGB/ZH6nbkP3f9WkBly2194KXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5HTTD%2Fbtshc6DbfGB%2FZH6nbkP3f9WkBly2194KXK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2000&quot; height=&quot;1304&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1304&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Cloud/AWS(Amazon Web Service)</category>
      <category>AWS</category>
      <category>crossaccount</category>
      <category>role전환</category>
      <author>jeonghyun</author>
      <guid isPermaLink="true">https://jhdatabase.tistory.com/142</guid>
      <comments>https://jhdatabase.tistory.com/entry/AWS-Role-%EC%A0%84%ED%99%98-%EC%84%A4%EC%A0%95#entry142comment</comments>
      <pubDate>Wed, 24 May 2023 13:51:42 +0900</pubDate>
    </item>
    <item>
      <title>[AWS - Local(Window)에서 ec2(Linux)로 파일 전송 방법]</title>
      <link>https://jhdatabase.tistory.com/entry/AWS-LocalWindow%EC%97%90%EC%84%9C-ec2Linux%EB%A1%9C-%ED%8C%8C%EC%9D%BC-%EC%A0%84%EC%86%A1-%EB%B0%A9%EB%B2%95</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;■ &lt;b&gt;SCP 형식&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;scp -i [키페어의 위치와 키페어] -r [보내는 파일] [우분투서버에서 저장할 위치]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;■ Window powershell 에서 scp 실행&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;※ permissions for pem are too open 에러 발생&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1684900640189&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;PS C:\AWS_key&amp;gt; scp -i C:\AWS_key\kimjeonghyun.pem -r C:\install ec2-user@43.201.30.75:/home/ec2-user
Bad permissions. Try removing permissions for user: BUILTIN\\Users (S-1-5-32-545) on file C:/AWS_key/kimjeonghyun.pem.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions for 'C:/AWS_key/kimjeonghyun.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key &quot;C:/AWS_key/kimjeonghyun.pem&quot;: bad permissions
ec2-user@43.201.30.75: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
lost connecti&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;해결방법&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. pem키 우클릭 &amp;rarr; 속성&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1126&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dr4OBz/btsg97o75nw/ND2bckijFDK4LiYezg2Xyk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dr4OBz/btsg97o75nw/ND2bckijFDK4LiYezg2Xyk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dr4OBz/btsg97o75nw/ND2bckijFDK4LiYezg2Xyk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdr4OBz%2Fbtsg97o75nw%2FND2bckijFDK4LiYezg2Xyk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2000&quot; height=&quot;1126&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1126&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 보안 &amp;rarr; 고급&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;3174&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mEgPH/btsg9ME62m1/laz6WkLuHvomTLK08ndFjK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mEgPH/btsg9ME62m1/laz6WkLuHvomTLK08ndFjK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mEgPH/btsg9ME62m1/laz6WkLuHvomTLK08ndFjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmEgPH%2Fbtsg9ME62m1%2Flaz6WkLuHvomTLK08ndFjK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;406&quot; height=&quot;644&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;3174&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3 .상속안함&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1538&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dekx2U/btsg9EncRSW/ovs4dgW6Nb1jtUIcZr5ck1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dekx2U/btsg9EncRSW/ovs4dgW6Nb1jtUIcZr5ck1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dekx2U/btsg9EncRSW/ovs4dgW6Nb1jtUIcZr5ck1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdekx2U%2Fbtsg9EncRSW%2Fovs4dgW6Nb1jtUIcZr5ck1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2000&quot; height=&quot;1538&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1538&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. &lt;span data-token-index=&quot;0&quot;&gt;이 개체에서 상속된 사용 권한을 모두 제거합니다. 클릭&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1014&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NjmB9/btshasM4mmO/PzYkRYkqQgukKQLkGBZK01/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NjmB9/btshasM4mmO/PzYkRYkqQgukKQLkGBZK01/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NjmB9/btshasM4mmO/PzYkRYkqQgukKQLkGBZK01/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNjmB9%2FbtshasM4mmO%2FPzYkRYkqQgukKQLkGBZK01%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2000&quot; height=&quot;1014&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1014&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;5. &lt;span data-token-index=&quot;0&quot;&gt;파일의 OWNER만 남게 설정&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1538&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Tvb8X/btsg9gUrb0V/HIubkt2gu47lpQrsYI9PU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Tvb8X/btsg9gUrb0V/HIubkt2gu47lpQrsYI9PU1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Tvb8X/btsg9gUrb0V/HIubkt2gu47lpQrsYI9PU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTvb8X%2Fbtsg9gUrb0V%2FHIubkt2gu47lpQrsYI9PU1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2000&quot; height=&quot;1538&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1538&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;6. &lt;span data-token-index=&quot;0&quot;&gt;적용 후 scp 재실행&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1684901101618&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;PS C:\AWS_key&amp;gt; scp -i C:\AWS_key\kimjeonghyun.pem -r C:\install ec2-user@43.201.30.75:/home/ec2-user
mysql-8.0.28-el7-x86_64.tar                                                            19%  230MB   4.6MB/s   03:25 ETA&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Cloud/AWS(Amazon Web Service)</category>
      <category>AWS</category>
      <category>scp</category>
      <category>파일전송</category>
      <author>jeonghyun</author>
      <guid isPermaLink="true">https://jhdatabase.tistory.com/141</guid>
      <comments>https://jhdatabase.tistory.com/entry/AWS-LocalWindow%EC%97%90%EC%84%9C-ec2Linux%EB%A1%9C-%ED%8C%8C%EC%9D%BC-%EC%A0%84%EC%86%A1-%EB%B0%A9%EB%B2%95#entry141comment</comments>
      <pubDate>Wed, 24 May 2023 13:06:24 +0900</pubDate>
    </item>
    <item>
      <title>[MySQL - Transaction Isolation Levels]</title>
      <link>https://jhdatabase.tistory.com/entry/MySQL-Transaction-Isolation-Levels</link>
      <description>&lt;div&gt;&lt;b&gt;&lt;span&gt;■ MySQL 격리 수준(from Real MySQL 8.0)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;여러 트랜잭션이 동시에 처리될 때 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있게 허용할지 말지를 결정하는 것&lt;/div&gt;
&lt;div&gt;크게 &quot;READ UNCOMMITTED&quot; &quot;READ COMMITTED&quot; &quot;REPEATABLE READ&quot; &quot; SERIALIZABLE&quot;로 나뉜다.&lt;/div&gt;
&lt;div&gt;하지만 일반적인 데이터베이스에서 READ UNCOMMITTED는 거의 사용하지 않고, SERIALIZABLE또한 동시성이 중요한 데이터베이스에서는 거의 사용되지 않는다.&lt;/div&gt;
&lt;div&gt;격리 수준이 높아질수록 성능 개선이나 저하는 발생하지 않는다.&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1052&quot; data-origin-height=&quot;287&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BoJXL/btrYSOasDRR/3YLhkgNl6zkqEBLWN3sCsK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BoJXL/btrYSOasDRR/3YLhkgNl6zkqEBLWN3sCsK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BoJXL/btrYSOasDRR/3YLhkgNl6zkqEBLWN3sCsK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBoJXL%2FbtrYSOasDRR%2F3YLhkgNl6zkqEBLWN3sCsK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1052&quot; height=&quot;287&quot; data-origin-width=&quot;1052&quot; data-origin-height=&quot;287&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;※ 일반적인 온라인 서브스 용도에서는 READ COMMITTED와 REPEATABLE READ 중 하나를 사용합니다.&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;READ UNCOMMITTED&lt;/b&gt;&lt;/blockquote&gt;
&lt;div&gt;Insert한 정보를 commit하기 전에 select해서 볼 수 있다. 이처럼 어떤 트랜잭션에서 처리한 작업이 완료되지 않았는데도 다른 트랜잭션에서 볼 수 있는 현상을 더티 리드(Dirty read)라고 한다.&lt;/div&gt;
&lt;div&gt;Dirty read는 데이터가 나타났다가 사라졌다 하는 현상을 초래(Insert했다가 commit전에 롤백하면 보였다 사라지는 현상)&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;정합성에 문제가 많은 격리 수준&lt;/b&gt;&lt;/span&gt;이다. &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;MySQL을 사용한다면 최소한 READ COMMITTED 이상의 격리 수준을 사용할 것을 권장한다.&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;LOCK이 발생하지 않는다.&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;INSERT, UPDATE, DELETE 후 COMMIT 이나 ROLLBACK에 상관없이 현재의 데이터를 읽어오기 때문에&amp;nbsp;&lt;/b&gt;&lt;b&gt;ROLLBACK이 될 데이터도 읽어올 수 있으므로 주의가 필요&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;READ COMMITTED&lt;/b&gt;&lt;/blockquote&gt;
&lt;div&gt;오라클에서 기본으로 사용되는 격리 수준이며, 온라인 서비스에서 가장 많이 선택되는 격리 수준이다.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;Commit이 완료된 데이터만 다른 트랜잭션에서 조회할 수&amp;nbsp; 있기 때문에 Dirty read같은 현상은 발생하지 않는다.&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;하지만 하나의 트랜잭션 내에서 똑같은 select 쿼리를 실행했을 때는 같은 결과를 가져와야하는 REPEATABLE READ 정합성에 어긋난다.&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;MySQL에서 많은 양의 데이터를 복제하거나 이동할 때 이 Level 추천&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;Lock이 발생하지 않는다.&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;REPEATABLE READ&amp;nbsp;&lt;/b&gt;&lt;/blockquote&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;commit전에는 undo의 내용이 보인다&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;MySQL의 Innodb에서 기본으로 사용되는 격리 수준이다. 바이너리 로그를 가진 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;MySQL 서버에서는 최소 REPEATABLE READ격리 수준 이상을 사용&lt;/b&gt;&lt;/span&gt;해야한다.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;MVCC 방식을 보장하고 NON-REPEATABLE READ부정합이 발생하지 않는다.&lt;/div&gt;
&lt;div&gt;SELECT시 현재 시점의 스냅샷을 만들고 스냅샷을 조회한다.&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;record lock과 gap lock이 발생한다.&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;CREATE SELECT, INSERT SELECT시 lock이 발생한다.&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;Default LEVEL이다.&lt;/div&gt;
&lt;div&gt;SELECT시 현재 시점의 스냅샷을 만들고 스냅샷을 조회한다.&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;동일 트랜잭션 내에서 일관성을 보장한다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;※ Insert 도중에 다른 트랜잭션에서 Select ..For Update 로 조회하면 부정합이 발생할 수있다.&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;SERIALIZABLE&lt;/b&gt;&lt;/blockquote&gt;
&lt;div&gt;가장 단순한 격리 수준, 기본적으로 순수한 Select작업은 아무런 레코드 잠금도 설정하지 않고 실행됨.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;일반적인 DB에서 일어나는 PHANTOM READ문제가 일어나지 않는다. Innodb에서는 갭 락과 넥스트 키 락 덕분에 REPEATABLE READ격리 수준에서도 이미 PHANTOM READ가 발생하지 않기때문에&lt;/div&gt;
&lt;div&gt;굳이 SERIALIZABLE을 사용할 필요 없어보인다.&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;SELECT 문에 사용하는 모든 테이블에 shared lock이 발생한다.&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;사전 확인&lt;/b&gt;&lt;/blockquote&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■&amp;nbsp;Isolation Levels 확인&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;default&lt;/b&gt; :&amp;nbsp;&lt;span style=&quot;color: #3665ee;&quot;&gt;REPEATABLE-READ&lt;/span&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1675992416765&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; show variables like 'transaction_isolation';
+-----------------------+-----------------+
| Variable_name         | Value           |
+-----------------------+-----------------+
| transaction_isolation | REPEATABLE-READ |
+-----------------------+-----------------+
1 row in set (0.00 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;■ autocommit OFF 설정&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;commit 명령 전까지 변경 사항이 반영되지 않게하기 위해 설정&lt;/div&gt;
&lt;pre id=&quot;code_1675992434330&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; set autocommit=0;
Query OK, 0 rows affected (0.00 sec)


mysql&amp;gt; show variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit    | OFF   |
+---------------+-------+
1 row in set (0.01 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ Start transaction&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1675992445741&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; start transaction;
Query OK, 0 rows affected (0.00 sec)


mysql&amp;gt; create table test(name varchar(30), age int);
Query OK, 0 rows affected (0.05 sec)


mysql&amp;gt; insert into test values('kim',27);
Query OK, 1 row affected (0.00 sec)


mysql&amp;gt; commit;
Query OK, 0 rows affected (0.00 sec)


mysql&amp;gt; select * from test;
+------+------+
| name | age  |
+------+------+
| kim  |   27 |
+------+------+
1 row in set (0.00 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;격리 수준별 테스트&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;1.READ-UNCOMMITTED&amp;nbsp;&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1675992510970&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; set global transaction_isolation='READ-UNCOMMITTED';
Query OK, 0 rows affected (0.00 sec)


mysql&amp;gt; show variables like 'transaction_isolation';
+-----------------------+------------------+
| Variable_name         | Value            |
+-----------------------+------------------+
| transaction_isolation | READ-UNCOMMITTED |
+-----------------------+------------------+
1 row in set (0.01 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;■ 좌측 세션에서 업데이트된 사항이 commit이 되지 않아도 다른세션(우측 세션)에서 변경된 내용을 조회 할 수 있습니다. =&amp;gt; DIRTY READ&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1897&quot; data-origin-height=&quot;434&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k9qCG/btrYLuhcsaK/J8cQvikx3YIKkpYmiGAF11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k9qCG/btrYLuhcsaK/J8cQvikx3YIKkpYmiGAF11/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k9qCG/btrYLuhcsaK/J8cQvikx3YIKkpYmiGAF11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk9qCG%2FbtrYLuhcsaK%2FJ8cQvikx3YIKkpYmiGAF11%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1897&quot; height=&quot;434&quot; data-origin-width=&quot;1897&quot; data-origin-height=&quot;434&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;2.READ-COMMITTED&amp;nbsp;&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1675992540504&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; set global transaction_isolation='READ-COMMITTED';
Query OK, 0 rows affected (0.00 sec)


mysql&amp;gt; show variables like 'transaction_isolation';
+-----------------------+----------------+
| Variable_name         | Value          |
+-----------------------+----------------+
| transaction_isolation | READ-COMMITTED |
+-----------------------+----------------+
1 row in set (0.00 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;■ commit(좌측 세션)이 되기전까지 새롭게 변형된 데이터(우측 세션)가 반영되지 않습니다.&lt;/b&gt;&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1895&quot; data-origin-height=&quot;598&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OJ1vJ/btrYJ1fzhIn/RPY32jhQ1E6xGhKpXjklWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OJ1vJ/btrYJ1fzhIn/RPY32jhQ1E6xGhKpXjklWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OJ1vJ/btrYJ1fzhIn/RPY32jhQ1E6xGhKpXjklWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOJ1vJ%2FbtrYJ1fzhIn%2FRPY32jhQ1E6xGhKpXjklWk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1895&quot; height=&quot;598&quot; data-origin-width=&quot;1895&quot; data-origin-height=&quot;598&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ 좌측 세션 업데이트 내역을 commit 이후 우측 세션에서 해당 사항 조회 가능&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1888&quot; data-origin-height=&quot;353&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ARtaz/btrYH2fpkLD/x8PqkGqLOOMEHv0lI0KKI1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ARtaz/btrYH2fpkLD/x8PqkGqLOOMEHv0lI0KKI1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ARtaz/btrYH2fpkLD/x8PqkGqLOOMEHv0lI0KKI1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FARtaz%2FbtrYH2fpkLD%2Fx8PqkGqLOOMEHv0lI0KKI1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1888&quot; height=&quot;353&quot; data-origin-width=&quot;1888&quot; data-origin-height=&quot;353&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;3.&lt;/span&gt;REPEATABLE-READ&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1675992574668&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; set global transaction_isolation='REPEATABLE-READ';
Query OK, 0 rows affected (0.00 sec)


mysql&amp;gt; show variables like 'transaction_isolation';
+-----------------------+-----------------+
| Variable_name         | Value           |
+-----------------------+-----------------+
| transaction_isolation | REPEATABLE-READ |
+-----------------------+-----------------+
1 row in set (0.00 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;■ 좌측 세션에서 변경 사항을 commit해도 다른 세션(우측 세션)에서는 해당 사항이 반영되지 않습니다.&lt;/div&gt;
&lt;div&gt;즉, &lt;b&gt;하나의 트랜잭션 내에서 똑같은 조회 쿼리를 실행하면 같은 결과&lt;/b&gt;를 가져옵니다.&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1895&quot; data-origin-height=&quot;638&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/C5DlQ/btrYJZPz7KG/QHq4YogiGkLhbqsuDXH8Mk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/C5DlQ/btrYJZPz7KG/QHq4YogiGkLhbqsuDXH8Mk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/C5DlQ/btrYJZPz7KG/QHq4YogiGkLhbqsuDXH8Mk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FC5DlQ%2FbtrYJZPz7KG%2FQHq4YogiGkLhbqsuDXH8Mk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1895&quot; height=&quot;638&quot; data-origin-width=&quot;1895&quot; data-origin-height=&quot;638&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;4.SERIALIZABLE&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1675992603454&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; set global transaction_isolation='SERIALIZABLE';
Query OK, 0 rows affected (0.00 sec)


mysql&amp;gt; show variables like 'transaction_isolation';
+-----------------------+--------------+
| Variable_name         | Value        |
+-----------------------+--------------+
| transaction_isolation | SERIALIZABLE |
+-----------------------+--------------+
1 row in set (0.00 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ 1번 세션에서 해당 테이블 조회중&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;939&quot; data-origin-height=&quot;391&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pQNgk/btrYIUOM9Os/5mi2ReRoMEPGp57t416k0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pQNgk/btrYIUOM9Os/5mi2ReRoMEPGp57t416k0k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pQNgk/btrYIUOM9Os/5mi2ReRoMEPGp57t416k0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpQNgk%2FbtrYIUOM9Os%2F5mi2ReRoMEPGp57t416k0k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;939&quot; height=&quot;391&quot; data-origin-width=&quot;939&quot; data-origin-height=&quot;391&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ 2번 세션(다른 세션)에서 해당 테이블에 접근 불가&lt;br /&gt;&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;903&quot; data-origin-height=&quot;94&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/q7L11/btrYJ08J1wV/4SnOoIgGaQLzU1I7GUZJmK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/q7L11/btrYJ08J1wV/4SnOoIgGaQLzU1I7GUZJmK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/q7L11/btrYJ08J1wV/4SnOoIgGaQLzU1I7GUZJmK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fq7L11%2FbtrYJ08J1wV%2F4SnOoIgGaQLzU1I7GUZJmK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;903&quot; height=&quot;94&quot; data-origin-width=&quot;903&quot; data-origin-height=&quot;94&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt; &lt;b&gt;※ 한 세션에서 트랜잭션(조회, 수정)을 진행하고 있으면 새로운 세션에서 접근 할 수 없다. (&lt;/b&gt;shared lock이 걸리기 때문에&amp;nbsp;&lt;b&gt;select는 가능)&lt;/b&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;참고&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://velog.io/@kimkevin90/MySQL-Transaction-Isolation-Levels&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://velog.io/@kimkevin90/MySQL-Transaction-Isolation-Levels&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1675992685461&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;MySQL - Transaction Isolation Levels&quot; data-og-description=&quot;(1) 테이블 생성(2) 테이블 세부 정보(3) 테이블 데이터 삽입(4) 테이블 데이터 업데이트(5) 테이블 데이터 업데이트(6) 테이블 데이터 삭제다수의 세션이 같은 데이터에 수정 or 접근 시 lock 적용(1) a&quot; data-og-host=&quot;velog.io&quot; data-og-source-url=&quot;https://velog.io/@kimkevin90/MySQL-Transaction-Isolation-Levels&quot; data-og-url=&quot;https://velog.io/@kimkevin90/MySQL-Transaction-Isolation-Levels&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bjKhH5/hyRzxEOJGd/IHxgxe7K0z0eKb6W4OkEW1/img.png?width=3000&amp;amp;height=2000&amp;amp;face=0_0_3000_2000,https://scrap.kakaocdn.net/dn/LDxNK/hyRzsXPouN/vS9pcWpbSa2IPCJQnfgR30/img.png?width=3000&amp;amp;height=2000&amp;amp;face=0_0_3000_2000,https://scrap.kakaocdn.net/dn/b6RLRi/hyRzCMVK5G/rqYTlzl8roLJFktAqSTw0k/img.jpg?width=2560&amp;amp;height=1920&amp;amp;face=0_0_2560_1920&quot;&gt;&lt;a href=&quot;https://velog.io/@kimkevin90/MySQL-Transaction-Isolation-Levels&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://velog.io/@kimkevin90/MySQL-Transaction-Isolation-Levels&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bjKhH5/hyRzxEOJGd/IHxgxe7K0z0eKb6W4OkEW1/img.png?width=3000&amp;amp;height=2000&amp;amp;face=0_0_3000_2000,https://scrap.kakaocdn.net/dn/LDxNK/hyRzsXPouN/vS9pcWpbSa2IPCJQnfgR30/img.png?width=3000&amp;amp;height=2000&amp;amp;face=0_0_3000_2000,https://scrap.kakaocdn.net/dn/b6RLRi/hyRzCMVK5G/rqYTlzl8roLJFktAqSTw0k/img.jpg?width=2560&amp;amp;height=1920&amp;amp;face=0_0_2560_1920');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;MySQL - Transaction Isolation Levels&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;(1) 테이블 생성(2) 테이블 세부 정보(3) 테이블 데이터 삽입(4) 테이블 데이터 업데이트(5) 테이블 데이터 업데이트(6) 테이블 데이터 삭제다수의 세션이 같은 데이터에 수정 or 접근 시 lock 적용(1) a&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;velog.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>DataBase Admin/DB Admin</category>
      <category>mysql</category>
      <category>Transaction Isolation Levels</category>
      <category>격리수준</category>
      <author>jeonghyun</author>
      <guid isPermaLink="true">https://jhdatabase.tistory.com/140</guid>
      <comments>https://jhdatabase.tistory.com/entry/MySQL-Transaction-Isolation-Levels#entry140comment</comments>
      <pubDate>Fri, 10 Feb 2023 10:32:02 +0900</pubDate>
    </item>
    <item>
      <title>[MySQL - 강제 복구 모드 innodb_force_recovery]</title>
      <link>https://jhdatabase.tistory.com/entry/MySQL-%EA%B0%95%EC%A0%9C-%EB%B3%B5%EA%B5%AC-%EB%AA%A8%EB%93%9C-innodbforcerecovery</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;테이블 손상이 발생할 수 있는 경우&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. &lt;b&gt;InnoDB 테이블이 손상되는 경우는 상당히 희박&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Double write, Checksum 그리고 기타 Validation 로직들과 버그 보완으로 인해서, 실제로 MyISAM에 비해서 InnoDB 테이블 스페이스 및 데이터 파일은 상당히 안정적이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;2.&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&amp;nbsp;대부분의 손상은 인덱스에서 발생&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;- &lt;span&gt;많은 사람들이 경험하는 InnoDB 데이터 파일의 손상은 80~90% 정도가&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;InnoDB 인덱스 (Secondary index)에 발생한 손상인 경우이며, 이 경우에는 단순히 ALTER TABLE 또는 데이터 덤프 및 재 적재만으로 해결된다. 복구 모드 &quot;1 ( SRV_FORCE_IGNORE_CORRUPT )&quot; 참조.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 이외&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- InnoDB 테이블의 문제점들의 경우는 덤프 및 적재&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;span style=&quot;letter-spacing: 0px;&quot;&gt;이 이외의 복잡한 형태의 장애에 대해서는, (아주 심한 경우가 아니라면)데이터베이스 전체를 덤프하고 다시 적재하는 것으로 해결될 수 있다. 하지만, 가장 최근의 백업에 Binary log를 Replay (재실행)해주는 것보다 빠를지는 상황을 적절히 판단해서 결정하는 것이 좋을 거 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;각 설정값 별 복구 내용과 방식&lt;/b&gt;&lt;/blockquote&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #3665ee;&quot;&gt;1 ( SRV_FORE_IGNORE_CORRUPT )&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;div&gt;손상된 페이지가 발견되어도 무시하고 mysql를 가동합니다. 기동되면 테이블을 덤프하여 복구시키거나 다른데이터베이스로 이전하는것이 좋습니다. (손상된 레코드와 페이지는 모두 건너뛰게 됨으로 데이터를 잃게 됩니다.)&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;※ 에러 로그 파일에 &lt;b&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;Database page corruption on disk or a failed&quot;&lt;/span&gt;&lt;/b&gt;라고 출력되는 경우, &lt;u&gt;&lt;span&gt;대부분 이 케이스인데 이는 테이블 스페이스의 페이지가 손상되어서 발생하는 문제&lt;/span&gt;&lt;/u&gt;이며, &lt;u&gt;&lt;span&gt;이 경우에는 이 모드로 MySQL의 기동 후 mysqldump나 SELECT INTO OUTFILE...을 이용하여 덤프 및 재 적재&lt;/span&gt;&lt;/u&gt;가 가능합니다.&amp;nbsp; &amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #3665ee;&quot;&gt;2 ( SRV_FORCE_NO_BACKGROUND )&lt;/span&gt;&amp;nbsp;&lt;/b&gt;&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;div&gt;메인 쓰레드(InnoDB의 경우 트랜잭션과 동시성 향상(MVCC)을 위해서 Undo 정보를 보존하게 되는데, 이 Undo 정보는 변경되기 전 데이터를 가지게 된다. 이러한 Undo 정보는 여러 가지 상황에 맞춰서 적절한 시점에 삭제가 되어야 하는데 이 작업을 Main thread가 처리하며 이 작업을 Purge라고도 부릅니다)가 구동되지 못하도록 합니다. &lt;u&gt;&lt;span&gt;만일 퍼지 연산(purge operation)이 진행되는 동안 크래시가 발생한다면, 이 복구 값은 퍼지 연산이 실행되는 것을 막으며 MySQL은 시작시킬 수 있습니다&lt;/span&gt;&lt;/u&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;※&amp;nbsp;&lt;span&gt;&lt;u&gt;Undo 정보는 InnoDB의 시스템 테이블 스페이스에 관리되기 때문에, 이 경우에는 전체 데이터베이스를 덤프 받은 후 다시 MySQL 서버를 구성&lt;/u&gt;해야 합니다&lt;/span&gt;.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #3665ee;&quot;&gt;3 ( SRV_FORCE_NO_TRX_UNDO )&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;div&gt;&lt;u&gt;&lt;span&gt;mysql 종료하던 시점에 진행중인 트랙잭션이 있다면, mysql 단순히 그 연결을 끊는다. 다시 실행 후 innodb엔진이 롤백을 실행하는데 데이터가 손상된경우 롤백을 실행할 수 없기 때문에 이경우 사용되는 복구모드&lt;/span&gt;&lt;/u&gt;입니다.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;MySQL을 종료하던 시점에 만약 진행 중인 트랜잭션이 있었다면, MySQL은 그냥 단순히 그 Connection을 강제로 끊어 버리게 된다. 그 이후 별도의 정리 작업은 진행하지 않게 된다. 즉 MySQL은 종료되었지만, 진행 중이던 트랜잭션의 정리 작업은 하지 않게 되는 것이다. MySQL이 다시 시작하게 되면, InnoDB 엔진은 트랜잭션 로그(Redo log라고도 함)를 읽어서 다시 처리 해주고(이 작업을&amp;nbsp;&amp;nbsp;Roll forward라고 함), 최종적으로 어떤 트랜잭션이 완료되지 않고 Connection이 종료되었는지 판단 후, 그 트랜잭션들은 InnoDB 엔진이 Rollback을 시키게 되는데, 만약 Undo 영역이나 다른 관련된 데이터들이 손상된 경우에는 Rollback 처리를 해줄 수 없게 되는데, 이 경우에 사용하는 복구 모드이다.&amp;nbsp;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;※&amp;nbsp;이 경우에는 사실은 Rollback되어야 하지만, 실제 데이터 파일에는 그 데이터가 남아 있을 수 있다. (이 부분은 &lt;span&gt;B&lt;u&gt;inary log나 Application의 로그를 통해서 수동으로 보완해 주거나 무시하는 방법밖에 없습니다&lt;/u&gt;.&lt;/span&gt;)&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #3665ee;&quot;&gt;4 ( SRV_FORCE_NO_IBUF_MERGE )&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;div&gt;&lt;u&gt;&lt;span&gt;INSERT, UPDATE, DELETE 연산자를 실행하지 않도록 한다. 테이블 통계값을 계산하지 않도록 한다&lt;/span&gt;&lt;/u&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;MySQL의 InnoDB는 INSERT, UPDATE, DELETE 등의 데이터 변경 작업으로 발생하는 인덱스 변경 작업들을 상황에 따라서 즉시 실행할 수도 또는 나중에 처리하도록 지연시킬 수 도 있다. 이렇게 나중에 처리하도록 지연시키기 위해서는 변경 내용을 어딘가에 기록해 두어야 하는데, 그 용도로 사용되는 버퍼가 &quot;Insert Buffer&quot;이다. 이 Insert Buffer의 내용은 언제 데이터 파일에 병합(Merge)될지 알 수 없다. MySQL을 종료해도 병합되지 않을 수 있는데, &lt;u&gt;&lt;span&gt;만약 MySQL이 재 시작 되면서 Insert Buffer의 손상을 감지하게 되면 Insert Buffer의 병합 작업이 실패하고 MySQL이 기동하지 못하게 된다&lt;/span&gt;&lt;/u&gt;. 이 경우 사용할 수 있는 강제 복구 모드이다. (&lt;u&gt;&lt;span&gt;이 경우에는 테이블 통계 정보 갱신을 유발하는 작업들을 해서는 안 된다. 주로 DDL이나 ANALYZE 명령 등&lt;/span&gt;&lt;/u&gt;).&amp;nbsp;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;※ &lt;u&gt;&lt;span&gt;Insert Buffer는 실제 데이터와 관련된 부분이 아니라 인덱스에 관련된 부분이라 테이블을 덤프 후 다시 적재하면 처리될 수도 있고, 아니면 단순히 &quot;ALTER TABLE tbl_name ENGINE=InnoDB;&quot; 명령만으로 해결될 수도 있다&lt;/span&gt;&lt;/u&gt;.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #3665ee;&quot;&gt;5 ( SRV_FORCE_NO_UNDO_LOG_SCAN )&lt;/span&gt;&amp;nbsp;&lt;/b&gt;&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;div&gt;&lt;span&gt;&lt;u&gt;데이터베이스를 시작할 때 UNDO LOG를 검사하지 않는다. InnoDB는 완벽하지 않은 트랜젝션도 실행된 것으로 다루게 된다&lt;/u&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;복구 모드 3 ( SRV_FORCE_NO_TRX_UNDO )의 처리와 비슷하며, 이 모드에서는 Undo 로그를 완전히 무시하고 완전히 종료되지 않은 트랜잭션(COMMIT/ROLLBACK되지 않은)을 모두 COMMIT된 것으로 처리해 버린다.&amp;nbsp;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;※&amp;nbsp;&lt;span&gt;&lt;u&gt;이 모드에서는 Undo 로그를 전혀 참조하지 않는 형태로 강제 복구&lt;/u&gt; 시킨다.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #3665ee;&quot;&gt;6 ( SRV_FORCE_NO_LOG_REDO )&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;div&gt;&lt;u&gt;&lt;span&gt;mysql이 재시작전 가장 뒤에 발생한 체크포인트 이후 모든 트랜젝션을 버리고 복구시키는 모드&lt;/span&gt;&lt;/u&gt;이다 복구 연결에서 로그 롤-포워드(roll-forward)를 실행하지 않고 강제복구한다.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;당연히 Redo 로그를 참조하지 않으므로 Roll forward라는 작업도 하지 않고 강제 복구시키게 된다. Redo 로그가 손상된 경우 이 모드로 강제 복구가 가능하다.당연히 Redo 로그를 참조하지 않으므로 Roll forward라는 작업도 하지 않고 강제 복구시키게 된다.&amp;nbsp;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;※&amp;nbsp;&lt;span&gt;&lt;u&gt;Redo 로그가 손상된 경우 이 모드로 강제 복구가 가능하다&lt;/u&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt; 복구 진행 시 작업 진행 절차 &lt;/b&gt;&lt;/blockquote&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;1. recovery 옵션을 my.cnf 파일에 넣고, mysql DB를 시작합니다.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1675985391418&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# vi /etc/my.cnf
innodb_force_recovery = 1​&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;2. mysql기동 후 정상적으로 실행이 되었을 때, DB를 dump 뜹니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1675985568694&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@master ~]# mysqldump -uroot -proot --routines --triggers --events --single-transaction [db이름] &amp;gt; kim.sql​&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;3. mysql정지 후 my.cnf 파일에서 recovery 옵션을 뺀 뒤, 다시 mysql 데몬을 시작해줍니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1675985588887&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# vi /etc/my.cnf
#innodb_force_recovery = 1​&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;4. 덤프파일 다시 import해줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1675985608520&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;## 복구 하고자 하는 database 날려주고 다시 빈 database 생성 =&amp;gt; 이렇게 삭제하면 무서우니 datafile 복사해두는 것이 좋습니다.
mysql&amp;gt; drop database kim;
Query OK, 3 rows affected (0.04 sec)

mysql&amp;gt; create database kim;
Query OK, 1 row affected (0.00 sec)


## 덤프파일 import
[root@master ~]# mysql -uroot -proot kim &amp;lt; kim.sql&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;5. 해당 데이터 확인 후 테이블이 깨져있는경우 recovery 옵션의 설정값을 올려서 진행합니다.&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;※ recovery 옵션 3이상 넘어갔을 때에는, 데이터가 망실될 가능성이 큽니다.&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;여기서 강제 복구 모드는 그 설정 값이 높아질수록 손실되는 데이터가 많아지기(복구 가능한 데이터가 적어지기) 때문에, &lt;b&gt;&lt;span style=&quot;color: #3665ee;&quot;&gt;가능한 강제 복구 모드를 낮은 것(1 -&amp;gt; 2 -&amp;gt; 3 -&amp;gt; 4 -&amp;gt; 5 -&amp;gt; 6)부터 시도하는 것이 좋다.&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #3665ee;&quot;&gt;recovery 옵션을 통해 복구한 경우 db를 덤프뜬 다음에, recovery옵션을 지우고 다시 데이터를 넣어주는 것이 좋다.&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;강제 복구를 사용한다고 하더라도, 테이블을 덤프하기 위해 SELECT를 실행하거나, 또는 DROP 또는 CREATE 테이블을 사용할 수가 있다. 만일 주어진 테이블에 롤백이 되는 동안의 크래시의 원인이 된다는 것을 알게 되면, 그 테이블을 드롭 시킨다. 또한, 대형 임포트 (mass import) 또는 ALTER TABLE의 실패로 인해 발생한 장기간의 롤백 (runaway rollback)을 중지 시키기 위해서도 이것을 사용할 수가 있다.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;mysqld 프로세스를 죽이고 innodb_force_recovery를 3으로 설정함으로써 롤백 없이 데이터 베이스를 업데이트 시킨 상태로 가져올 수가 있으며, 그런 다음에는 장기간 롤백의 원인이 된 테이블을 DROP시킨다.&lt;/div&gt;
&lt;div&gt;데이터베이스는 innodb_force_recovery에 대해서 논-제로 (non-zero) 값을 사용해야만 한다.&lt;/div&gt;
&lt;div&gt;데이터베이스의 안전성을 확보하기 위해서, &lt;b&gt;&lt;span style=&quot;color: #3665ee;&quot;&gt;InnoDB는 innodb_force_recovery가 0보다 큰 값으로 설정되어 있을 때에는 사용자가 INSERT, UPDATE, 또는 DELETE 연산을 하지 못하도록 한다.&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #e500ff;&quot;&gt;※ 용량큰 테이블 적재중 kill 했는데 rollback이 몇시간동안 발생시&lt;/span&gt;&amp;nbsp;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;MySQL 고수님들 의견&lt;/span&gt; :&amp;nbsp; &quot;&lt;span&gt;process kill 시키고 바로 킬안되더라도 rollback 될 때 건드리지말고 끝날때까지 기다리는게 낫다.&quot;&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;참고&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;http://intomysql.blogspot.com/2010/12/innodb_3017.html&quot;&gt;http://intomysql.blogspot.com/2010/12/innodb_3017.html&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1675985789128&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;InnoDB 테이블 손상(깨어진)시 강제 복구&quot; data-og-description=&quot;MyISAM 과 달리 InnoDB 테이블들은 매우 안정적이며 , 왠만해서는 데이터 파일이 깨어지는 경우는 거의 경험하지 못했다 . 하지만 , 데이터 파일이 깨어진다면 어떻게 해야 할까 ?. DBMS 벤더를 불문하&quot; data-og-host=&quot;intomysql.blogspot.com&quot; data-og-source-url=&quot;http://intomysql.blogspot.com/2010/12/innodb_3017.html&quot; data-og-url=&quot;http://intomysql.blogspot.com/2010/12/innodb_3017.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;http://intomysql.blogspot.com/2010/12/innodb_3017.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;http://intomysql.blogspot.com/2010/12/innodb_3017.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;InnoDB 테이블 손상(깨어진)시 강제 복구&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;MyISAM 과 달리 InnoDB 테이블들은 매우 안정적이며 , 왠만해서는 데이터 파일이 깨어지는 경우는 거의 경험하지 못했다 . 하지만 , 데이터 파일이 깨어진다면 어떻게 해야 할까 ?. DBMS 벤더를 불문하&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;intomysql.blogspot.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>DataBase Admin/DB Admin</category>
      <category>innodb_force_recovery</category>
      <category>mysql</category>
      <category>강제 복구 모드</category>
      <author>jeonghyun</author>
      <guid isPermaLink="true">https://jhdatabase.tistory.com/139</guid>
      <comments>https://jhdatabase.tistory.com/entry/MySQL-%EA%B0%95%EC%A0%9C-%EB%B3%B5%EA%B5%AC-%EB%AA%A8%EB%93%9C-innodbforcerecovery#entry139comment</comments>
      <pubDate>Fri, 10 Feb 2023 08:37:28 +0900</pubDate>
    </item>
    <item>
      <title>[MySQL - 로컬 컴퓨터 to MySQL 서버 데이터 이관] use.MySQL workbench</title>
      <link>https://jhdatabase.tistory.com/entry/MySQL-%EB%A1%9C%EC%BB%AC-%EC%BB%B4%ED%93%A8%ED%84%B0-to-MySQL-%EC%84%9C%EB%B2%84-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%9D%B4%EA%B4%80-use-MySQL-workbench</link>
      <description>&lt;div&gt;데이터 사이즈가 크다면 물론 마이그레이션 전용 서버를 만드는 것이 좋습니다. 하지만 덤프파일 사이즈가 크지않고 로컬 컴퓨터의 여유공간이 있다면 따로 마이그레이션 전용 서버 생성하지 않고 데이터를 Export/Import 할 수 있습니다.&lt;/div&gt;
&lt;div&gt;Workbench 툴을 이용해 로컬 컴퓨터로 덤프파일을 export 후 import 해보았습니다.&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;Test Data&lt;/b&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;745&quot; data-origin-height=&quot;544&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3yCEJ/btrYLuBqn2h/ZVHaMMuc4DXquGlUm8GYW0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3yCEJ/btrYLuBqn2h/ZVHaMMuc4DXquGlUm8GYW0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3yCEJ/btrYLuBqn2h/ZVHaMMuc4DXquGlUm8GYW0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3yCEJ%2FbtrYLuBqn2h%2FZVHaMMuc4DXquGlUm8GYW0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;745&quot; height=&quot;544&quot; data-origin-width=&quot;745&quot; data-origin-height=&quot;544&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt; Export&amp;nbsp;&lt;/b&gt;&lt;/blockquote&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ Data Export&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;상단 바에서 Server -&amp;gt; Data Export 클릭&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1032&quot; data-origin-height=&quot;480&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTKTv7/btrYIOnljWb/wrDwne03KAWVsHb82VVW31/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTKTv7/btrYIOnljWb/wrDwne03KAWVsHb82VVW31/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTKTv7/btrYIOnljWb/wrDwne03KAWVsHb82VVW31/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTKTv7%2FbtrYIOnljWb%2FwrDwne03KAWVsHb82VVW31%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1032&quot; height=&quot;480&quot; data-origin-width=&quot;1032&quot; data-origin-height=&quot;480&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ Dump 대상 데이터베이스 선택&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;좌측이 database, 우측이 table 선택 후 덤프 받을 경로 지정&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1693&quot; data-origin-height=&quot;869&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/G7Q28/btrYGuC9uwm/dWsDt2Uk67ZeUSwNdt621K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/G7Q28/btrYGuC9uwm/dWsDt2Uk67ZeUSwNdt621K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/G7Q28/btrYGuC9uwm/dWsDt2Uk67ZeUSwNdt621K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FG7Q28%2FbtrYGuC9uwm%2FdWsDt2Uk67ZeUSwNdt621K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1693&quot; height=&quot;869&quot; data-origin-width=&quot;1693&quot; data-origin-height=&quot;869&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ Start Export&amp;nbsp;&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1686&quot; data-origin-height=&quot;925&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKAuO0/btrYKGIRDos/FZsk6nh3KyKtBBv4tIoYd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKAuO0/btrYKGIRDos/FZsk6nh3KyKtBBv4tIoYd1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKAuO0/btrYKGIRDos/FZsk6nh3KyKtBBv4tIoYd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKAuO0%2FbtrYKGIRDos%2FFZsk6nh3KyKtBBv4tIoYd1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1686&quot; height=&quot;925&quot; data-origin-width=&quot;1686&quot; data-origin-height=&quot;925&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ 덤프파일 확인&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1345&quot; data-origin-height=&quot;671&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sdxHj/btrYG7H3T5V/yY6vytFbh9tHNwr7c2bI7K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sdxHj/btrYG7H3T5V/yY6vytFbh9tHNwr7c2bI7K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sdxHj/btrYG7H3T5V/yY6vytFbh9tHNwr7c2bI7K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsdxHj%2FbtrYG7H3T5V%2FyY6vytFbh9tHNwr7c2bI7K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1345&quot; height=&quot;671&quot; data-origin-width=&quot;1345&quot; data-origin-height=&quot;671&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt; Import &lt;/b&gt;&lt;/blockquote&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ Data Import&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;상단 바에서 Server -&amp;gt; Data Import 클릭&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1680&quot; data-origin-height=&quot;914&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ED0T1/btrYJQStZdD/Ske7K0VCYWKeH8AXoERfU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ED0T1/btrYJQStZdD/Ske7K0VCYWKeH8AXoERfU1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ED0T1/btrYJQStZdD/Ske7K0VCYWKeH8AXoERfU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FED0T1%2FbtrYJQStZdD%2FSke7K0VCYWKeH8AXoERfU1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1680&quot; height=&quot;914&quot; data-origin-width=&quot;1680&quot; data-origin-height=&quot;914&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ Import 대상 선정&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;덤프 경로 설정 후 import 대상 체크&lt;/div&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1690&quot; data-origin-height=&quot;926&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b12mqZ/btrYH2fjOTB/z2fuNmkpHAlMuWthPryaH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b12mqZ/btrYH2fjOTB/z2fuNmkpHAlMuWthPryaH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b12mqZ/btrYH2fjOTB/z2fuNmkpHAlMuWthPryaH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb12mqZ%2FbtrYH2fjOTB%2Fz2fuNmkpHAlMuWthPryaH0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1690&quot; height=&quot;926&quot; data-origin-width=&quot;1690&quot; data-origin-height=&quot;926&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;■ Start Import&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1689&quot; data-origin-height=&quot;925&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bebelE/btrYI53ruYy/sLiUrs1MzzjS8IXcCvCRB1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bebelE/btrYI53ruYy/sLiUrs1MzzjS8IXcCvCRB1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bebelE/btrYI53ruYy/sLiUrs1MzzjS8IXcCvCRB1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbebelE%2FbtrYI53ruYy%2FsLiUrs1MzzjS8IXcCvCRB1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1689&quot; height=&quot;925&quot; data-origin-width=&quot;1689&quot; data-origin-height=&quot;925&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ Import 데이터 확인&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;481&quot; data-origin-height=&quot;160&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DlOqV/btrYMW5wi1s/BkySXKM0ckkKN7UuljXq8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DlOqV/btrYMW5wi1s/BkySXKM0ckkKN7UuljXq8K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DlOqV/btrYMW5wi1s/BkySXKM0ckkKN7UuljXq8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDlOqV%2FbtrYMW5wi1s%2FBkySXKM0ckkKN7UuljXq8K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;481&quot; height=&quot;160&quot; data-origin-width=&quot;481&quot; data-origin-height=&quot;160&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>DataBase/MySQL &amp;amp; MariaDB</category>
      <author>jeonghyun</author>
      <guid isPermaLink="true">https://jhdatabase.tistory.com/138</guid>
      <comments>https://jhdatabase.tistory.com/entry/MySQL-%EB%A1%9C%EC%BB%AC-%EC%BB%B4%ED%93%A8%ED%84%B0-to-MySQL-%EC%84%9C%EB%B2%84-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%9D%B4%EA%B4%80-use-MySQL-workbench#entry138comment</comments>
      <pubDate>Fri, 10 Feb 2023 08:19:35 +0900</pubDate>
    </item>
    <item>
      <title>[MySQL - Online DDL] use. Gh-ost</title>
      <link>https://jhdatabase.tistory.com/entry/MySQL-Online-DDL-use-Gh-ost</link>
      <description>&lt;div&gt;&lt;b&gt;Gh-ost란,&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;MySQL에서 online alter 기능이 있지만 아직 완벽하지는 않습니다.&lt;/div&gt;
&lt;div&gt;이를 보완하기 위해 percona 의 pt-online-schema-change 스크립트를 사용하기도 하는데요,&lt;/div&gt;
&lt;div&gt;원본과 복사본 테이블의 sync 를 trigger 기반으로 맞춘다는 단점이 있습니다. 특수 케이스에서는 일관성 문제도 야기될 수 있고, trigger 가 유발할 수 있는 Lock 으로 인해서 마지막에 swap 할 때 쿼리들이 실패하기도 합니다.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;이러한 컨셉은 2009년부터 이어져왔고 큰 변화가 없었습니다. gh-ost 가 이러한 단점을 보완해서 pt-online-schema-change 를 대체할 수 있을지 조심스레 살펴보고 있습니다. 원본과 복사본(ghost table) 간의 sync 를 맞추는데 binlog(RBR) 를 사용합니다. trigger 를 없앰으로써 기대되는 효과가 있습니다.&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;Docs URL&lt;/b&gt; :&amp;nbsp;&lt;a href=&quot;https://github.com/github/gh-ost&quot;&gt;https://github.com/github/gh-ost&lt;/a&gt;
&lt;figure id=&quot;og_1675585265191&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - github/gh-ost: GitHub's Online Schema-migration Tool for MySQL&quot; data-og-description=&quot;GitHub's Online Schema-migration Tool for MySQL. Contribute to github/gh-ost development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/github/gh-ost&quot; data-og-url=&quot;https://github.com/github/gh-ost&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bAVHja/hyRvfSAN9c/ieK3v4LMu8zuaZQfjbnRak/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/github/gh-ost&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/github/gh-ost&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bAVHja/hyRvfSAN9c/ieK3v4LMu8zuaZQfjbnRak/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - github/gh-ost: GitHub's Online Schema-migration Tool for MySQL&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;GitHub's Online Schema-migration Tool for MySQL. Contribute to github/gh-ost development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다른 online-ddl 툴인 pt-online-change-schema 사용하는 방법입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://jhdatabase.tistory.com/108&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://jhdatabase.tistory.com/108&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1675585486044&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[MySQL - Online DDL] part 3 use. pt-online-change-schema&quot; data-og-description=&quot;pt-online-change-schema 이란, Mysql에서 몇억건 이상의 대량의 데이터를 갖고 있는 테이블을 수정 하는것은 어렵습니다. 단순히 alter table을 해버리면 4시간, 5시간 이상 수행되기 떄문에 이를 해결 하기&quot; data-og-host=&quot;jhdatabase.tistory.com&quot; data-og-source-url=&quot;https://jhdatabase.tistory.com/108&quot; data-og-url=&quot;https://jhdatabase.tistory.com/108&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bBTjHn/hyRwEJYPLj/KP13YJms19fzGnwGypnslk/img.png?width=800&amp;amp;height=401&amp;amp;face=0_0_800_401,https://scrap.kakaocdn.net/dn/bpx9cM/hyRvcIkML2/KP3DbHHaNhqkaOFndgKHF1/img.png?width=800&amp;amp;height=401&amp;amp;face=0_0_800_401,https://scrap.kakaocdn.net/dn/bqNXXd/hyRvkTRVOZ/gEsCJcO14WmYM2l4pts5F1/img.jpg?width=1440&amp;amp;height=1080&amp;amp;face=0_0_1440_1080&quot;&gt;&lt;a href=&quot;https://jhdatabase.tistory.com/108&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://jhdatabase.tistory.com/108&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bBTjHn/hyRwEJYPLj/KP13YJms19fzGnwGypnslk/img.png?width=800&amp;amp;height=401&amp;amp;face=0_0_800_401,https://scrap.kakaocdn.net/dn/bpx9cM/hyRvcIkML2/KP3DbHHaNhqkaOFndgKHF1/img.png?width=800&amp;amp;height=401&amp;amp;face=0_0_800_401,https://scrap.kakaocdn.net/dn/bqNXXd/hyRvkTRVOZ/gEsCJcO14WmYM2l4pts5F1/img.jpg?width=1440&amp;amp;height=1080&amp;amp;face=0_0_1440_1080');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[MySQL - Online DDL] part 3 use. pt-online-change-schema&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;pt-online-change-schema 이란, Mysql에서 몇억건 이상의 대량의 데이터를 갖고 있는 테이블을 수정 하는것은 어렵습니다. 단순히 alter table을 해버리면 4시간, 5시간 이상 수행되기 떄문에 이를 해결 하기&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;jhdatabase.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;pt-osv VS gh-ost 차이점&lt;/b&gt;&lt;/blockquote&gt;
&lt;table style=&quot;border-collapse: collapse; width: 117.093%; height: 381px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.1628%;&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 10.814%;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;background-color: #ffffff; color: #1f1f1f;&quot;&gt;pt-osc&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 72.907%;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;gh-ost&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.1628%;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;작업 중 DML 반영 방식&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 10.814%;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;trigger&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 72.907%;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;binlog&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.1628%;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;binlog_format&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 10.814%;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;상관없음&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 72.907%;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;ROW(Mixed안됨)&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.1628%;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;log_slave_updates&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 10.814%;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;상관없음&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 72.907%;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;master에서 binlog 가져오면 상관없음, slave에서 가져오면 필수&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.1628%;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;FK&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 10.814%;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;지원&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 72.907%;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;미지원&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.1628%;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;trigger&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 10.814%;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;지원&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 72.907%;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;미지원&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.1628%;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;임의 중단 기능&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 10.814%;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;미지원&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 72.907%;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;throttle, panic 옵션으로 지원&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.1628%;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;작업 도중 설정 변경&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 10.814%;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;미지원&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 72.907%;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;지원 (&lt;/span&gt;&lt;a href=&quot;https://github.com/github/gh-ost/blob/d2726c77f86cb65e25bce5c0ac5fe3fa0c997488/doc/interactive-commands.md&quot;&gt;https://github.com/github/gh-ost/blob/d2726c77f86cb65e25bce5c0ac5fe3fa0c997488/doc/interactive-commands.md&lt;/a&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.1628%;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;작업 수행 서버&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 10.814%;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;Master&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 72.907%;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;Master / Slave (&amp;ndash;migrate-on-replica)&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt; Architecure &lt;/b&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;358&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKn9G5/btrYchh3n2j/xU4UX3ipRkiNtuZwKzbnl1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKn9G5/btrYchh3n2j/xU4UX3ipRkiNtuZwKzbnl1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKn9G5/btrYchh3n2j/xU4UX3ipRkiNtuZwKzbnl1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKn9G5%2FbtrYchh3n2j%2FxU4UX3ipRkiNtuZwKzbnl1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;358&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;358&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■&amp;nbsp; Sample Data Insert&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1675585586145&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; create table test_tbl ( a int primary key auto_increment, b varchar(100), c varchar(100));
Query OK, 0 rows affected (0.02 sec)

mysql&amp;gt; insert into test_tbl select null, uuid(),uuid() from information_schema.columns as a, information_schema.columns as b limit 1000000;
Query OK, 1000000 rows affected (16.44 sec)
Records: 1000000  Duplicates: 0  Warnings: 0



mysql&amp;gt; desc test_tbl;
+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| a     | int          | NO   | PRI | NULL    | auto_increment |
| b     | varchar(100) | YES  |     | NULL    |                |
| c     | varchar(100) | YES  |     | NULL    |                |
+-------+--------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ ghost 실행 유저 생성&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1675585604076&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; create user ghost@'%' identified by 'ghost';
Query OK, 0 rows affected (0.01 sec)

mysql&amp;gt; grant all on *.* to ghost@'%';
Query OK, 0 rows affected (0.01 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ gh-ost Install&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1675585623781&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@master ~]# wget https://github.com/github/gh-ost/releases/download/v1.0.49/gh-ost-1.0.49-1.x86_64.rpm
--2023-02-03 08:03:23--  https://github.com/github/gh-ost/releases/download/v1.0.49/gh-ost-1.0.49-1.x86_64.rpm
Resolving github.com (github.com)... 20.200.245.247
Connecting to github.com (github.com)|20.200.245.247|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://objects.githubusercontent.com/github-production-release-asset-2e65be/54378638/db25d780-4b3d-11ea-905d-1dd3a75a166a?X-Amz-Algorithm=AWS4-HMAC-SHA256&amp;amp;X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20230202%2Fus-east-1%2Fs3%2Faws4_request&amp;amp;X-Amz-Date=20230202T230323Z&amp;amp;X-Amz-Expires=300&amp;amp;X-Amz-Signature=34ea3061892e1c08d6525f5898718052a6f80d6e333b2154becd161f7dfa4009&amp;amp;X-Amz-SignedHeaders=host&amp;amp;actor_id=0&amp;amp;key_id=0&amp;amp;repo_id=54378638&amp;amp;response-content-disposition=attachment%3B%20filename%3Dgh-ost-1.0.49-1.x86_64.rpm&amp;amp;response-content-type=application%2Foctet-stream [following]
--2023-02-03 08:03:23--  https://objects.githubusercontent.com/github-production-release-asset-2e65be/54378638/db25d780-4b3d-11ea-905d-1dd3a75a166a?X-Amz-Algorithm=AWS4-HMAC-SHA256&amp;amp;X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20230202%2Fus-east-1%2Fs3%2Faws4_request&amp;amp;X-Amz-Date=20230202T230323Z&amp;amp;X-Amz-Expires=300&amp;amp;X-Amz-Signature=34ea3061892e1c08d6525f5898718052a6f80d6e333b2154becd161f7dfa4009&amp;amp;X-Amz-SignedHeaders=host&amp;amp;actor_id=0&amp;amp;key_id=0&amp;amp;repo_id=54378638&amp;amp;response-content-disposition=attachment%3B%20filename%3Dgh-ost-1.0.49-1.x86_64.rpm&amp;amp;response-content-type=application%2Foctet-stream
Resolving objects.githubusercontent.com (objects.githubusercontent.com)... 185.199.110.133, 185.199.111.133, 185.199.109.133, ...
Connecting to objects.githubusercontent.com (objects.githubusercontent.com)|185.199.110.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 4957238 (4.7M) [application/octet-stream]
Saving to: &amp;lsquo;gh-ost-1.0.49-1.x86_64.rpm&amp;rsquo;

100%[===================================================================================================================================================&amp;gt;] 4,957,238   12.3MB/s   in 0.4s   

2023-02-03 08:03:24 (12.3 MB/s) - &amp;lsquo;gh-ost-1.0.49-1.x86_64.rpm&amp;rsquo; saved [4957238/4957238]




[root@master ~]# rpm -ivh gh-ost-1.0.49-1.x86_64.rpm
Preparing...                          ################################# [100%]
Updating / installing...
   1:gh-ost-1:1.0.49-1                ################################# [100%]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ binlog format 확인&amp;nbsp; =&amp;gt; ROW&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1675585639272&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; show variables like 'binlog_format';;
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW   |
+---------------+-------+
1 row in set (0.01 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ ghost 실행 (add column)&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1675585669075&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;gh-ost \
--max-load=Threads_running=100 \
--critical-load=Threads_running=200 \
--chunk-size=1000 \
--throttle-control-replicas=&quot;192.168.100.36:3306&quot; \
--max-lag-millis=500 \
--user=&quot;ghost&quot; \
--password='ghost' \
--host=&quot;192.168.100.35&quot; \
--port=3306 \
--database=&quot;kim&quot; \
--table=&quot;test_tbl&quot; \
--verbose \
--alter=&quot;add column ghost5 int not null default 0&quot; \
--switch-to-rbr \
--allow-on-master \
--cut-over=default \
--default-retries=120 \
--panic-flag-file=/tmp/ghost.panic.flag \
--postpone-cut-over-flag-file=/tmp/ghost.postpone.flag \
--throttle-flag-file=/tmp/throttle.flag \
--execute



host : binary log 를 가져올 서버 설정

throttle-control-replicas : &amp;ndash;max-lag-millis 를 체크할 리플리카 서버 지정하는 옵션

switch-to-rbr : gh-ost 는 binlog_format=ROW 일 때만 동작하기 때문에 작업 대상 서버의 binlog_format을 ROW로 변경하는 옵션. 주로 Slave의 binlog_format 변경과 log_slave_updates 옵션 설정 후 재기동 수행 (원복 X)

allow-master-master : MMM 사용할 때 처럼 master-master (active-passive) 구성일 때 설정

allow-on-master : master에서 작업할 때 설정하는 옵션

migrate-on-replica : slave 에서 작업할 때 설정하는 옵션 ( 양방향 복제가 아닌 이상 slave에만 작업 적용되므로 참고! )

assume-master-host : allow-master-master 설정 시 작업할 master 서버 지정하는 옵션

cut-over : org-table과 gh-ost table 간 swapping하는 migration의 마지막 단계로 atomic 하기 때문에 swapping 도중 실패하는 쿼리는 없음

panic-flag-file : flag-file 생성 시 작업 취소

postpone-cut-over-flag-file : flag-file 존재하면 cut-over 단계를 수행하지 않고 대기함 이 옵션 설정 시 작업 시작 할때 이 파일을 생성하기 때문에 마지막 rename 단계 전에 수동으로 삭제해줘야함, 대기하더라도 DML은 계속 copy 진행됨

throttle-flag-file : throttle-flag-file 존재하면 작업 일시정지&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ 분석&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1675585702525&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;## master / slave 파악 및 binary log 가져올 서버(여기선 slave) 와 binlog position 확인
2023-02-03 13:33:17 INFO starting gh-ost 1.0.49
2023-02-03 13:33:17 INFO Migrating `kim`.`test_tbl`
2023-02-03 13:33:17 INFO connection validated on 192.168.100.35:3306
2023-02-03 13:33:17 INFO User has SUPER, REPLICATION SLAVE privileges, and has ALL privileges on `kim`.*
2023-02-03 13:33:17 INFO binary logs validated on 192.168.100.35:3306
2023-02-03 13:33:17 INFO Restarting replication on 192.168.100.35:3306 to make sure binlog settings apply to replication thread
2023-02-03 13:33:17 INFO Inspector initiated on master:3306, version 8.0.28
2023-02-03 13:33:17 INFO Table found. Engine=InnoDB
2023-02-03 13:33:17 INFO Estimated number of rows via EXPLAIN: 993705
2023-02-03 13:33:17 INFO Master forced to be 192.168.100.35:3306
2023-02-03 13:33:17 INFO log_slave_updates validated on 192.168.100.35:3306
2023-02-03 13:33:17 INFO connection validated on 192.168.100.35:3306
2023-02-03 13:33:17 INFO Connecting binlog streamer at mysql.000036:175418044
[2023/02/03 13:33:17] [info] binlogsyncer.go:133 create BinlogSyncer with config {99999 mysql 192.168.100.35 3306 ghost    false false &amp;lt;nil&amp;gt; false UTC true 0 0s 0s 0 false}
[2023/02/03 13:33:17] [info] binlogsyncer.go:354 begin to sync binlog from position (mysql.000036, 175418044)
[2023/02/03 13:33:17] [info] binlogsyncer.go:203 register slave for master server 192.168.100.35:3306
[2023/02/03 13:33:17] [info] binlogsyncer.go:723 rotate to (mysql.000036, 175418044)
2023-02-03 13:33:17 INFO rotate to next log from mysql.000036:0 to mysql.000036
2023-02-03 13:33:17 INFO connection validated on 192.168.100.35:3306
2023-02-03 13:33:17 INFO connection validated on 192.168.100.35:3306
2023-02-03 13:33:17 INFO will use time_zone='SYSTEM' on applier
2023-02-03 13:33:17 INFO Examining table structure on applier
2023-02-03 13:33:17 INFO Applier initiated on master:3306, version 8.0.28
...



## migration 과정을 기록할 _tb_test_ghc 테이블 , 데이터 copy 및 rename 할 _tb_test_gho 임시테이블 생성
2023-02-03 13:33:17 INFO Dropping table `kim`.`_test_tbl_ghc`
2023-02-03 13:33:17 INFO Table dropped
2023-02-03 13:33:17 INFO Creating changelog table `kim`.`_test_tbl_ghc`
2023-02-03 13:33:17 INFO Changelog table created
2023-02-03 13:33:17 INFO Creating ghost table `kim`.`_test_tbl_gho`
2023-02-03 13:33:17 INFO Ghost table created
2023-02-03 13:33:17 INFO Altering ghost table `kim`.`_test_tbl_gho`
2023-02-03 13:33:17 INFO Ghost table altered


## 임시 테이블 생김
mysql&amp;gt; show tables;
+---------------+
| Tables_in_kim |
+---------------+
| _test_tbl_ghc |
| _test_tbl_gho |
| kim           |
| test_tbl      |
+---------------+
4 rows in set (0.00 sec)




## 설정 재확인 및 postpone 파일 생성 (마지막 rename 단계에서 수동으로 지워줘야합니다.)
2023-02-03 13:33:17 INFO Intercepted changelog state GhostTableMigrated
2023-02-03 13:33:17 INFO Waiting for ghost table to be migrated. Current lag is 0s
2023-02-03 13:33:17 INFO Handled changelog state GhostTableMigrated
2023-02-03 13:33:17 INFO Chosen shared unique key is PRIMARY
2023-02-03 13:33:17 INFO Shared columns are a,b,c
2023-02-03 13:33:17 INFO Listening on unix socket file: /tmp/gh-ost.kim.test_tbl.sock
2023-02-03 13:33:17 INFO Migration min values: [1]
2023-02-03 13:33:17 INFO Migration max values: [1000000]
2023-02-03 13:33:17 INFO Waiting for first throttle metrics to be collected
2023-02-03 13:33:17 INFO First throttle metrics collected
# Migrating `kim`.`test_tbl`; Ghost table is `kim`.`_test_tbl_gho`
# Migrating master:3306; inspecting master:3306; executing on master
# Migration started at Fri Feb 03 13:33:17 +0900 2023
# chunk-size: 1000; max-lag-millis: 500ms; dml-batch-size: 10; max-load: Threads_running=100; critical-load: Threads_running=200; nice-ratio: 0.000000
# throttle-flag-file: /tmp/throttle.flag
# throttle-additional-flag-file: /tmp/gh-ost.throttle
# throttle-control-replicas count: 1
# postpone-cut-over-flag-file: /tmp/ghost.postpone.flag [set]
# panic-flag-file: /tmp/ghost.panic.flag
# Serving on unix socket: /tmp/gh-ost.kim.test_tbl.sock




## org_table에서 tmp table로 data copy
Copy: 0/993705 0.0%; Applied: 0; Backlog: 0/1000; Time: 0s(total), 0s(copy); streamer: mysql.000036:195467254; Lag: 0.01s, State: migrating; ETA: N/A
Copy: 0/993705 0.0%; Applied: 0; Backlog: 0/1000; Time: 1s(total), 1s(copy); streamer: mysql.000036:195471905; Lag: 0.01s, State: migrating; ETA: N/A
Copy: 62000/993705 6.2%; Applied: 0; Backlog: 0/1000; Time: 2s(total), 2s(copy); streamer: mysql.000036:200786238; Lag: 0.01s, State: migrating; ETA: 30s
Copy: 130000/993705 13.1%; Applied: 0; Backlog: 0/1000; Time: 3s(total), 3s(copy); streamer: mysql.000036:206614414; Lag: 0.01s, State: migrating; ETA: 19s
Copy: 196000/993705 19.7%; Applied: 0; Backlog: 0/1000; Time: 4s(total), 4s(copy); streamer: mysql.000036:212271313; Lag: 0.01s, State: migrating; ETA: 16s
Copy: 261000/993705 26.3%; Applied: 0; Backlog: 0/1000; Time: 5s(total), 5s(copy); streamer: mysql.000036:217843014; Lag: 0.01s, State: migrating; ETA: 14s
Copy: 334000/993705 33.6%; Applied: 0; Backlog: 0/1000; Time: 6s(total), 6s(copy); streamer: mysql.000036:224099391; Lag: 0.01s, State: migrating; ETA: 11s
Copy: 406000/993705 40.9%; Applied: 0; Backlog: 0/1000; Time: 7s(total), 7s(copy); streamer: mysql.000036:230270128; Lag: 0.10s, State: migrating; ETA: 10s
Copy: 477000/993705 48.0%; Applied: 0; Backlog: 0/1000; Time: 8s(total), 8s(copy); streamer: mysql.000036:236355229; Lag: 0.01s, State: migrating; ETA: 8s
Copy: 545000/993705 54.8%; Applied: 0; Backlog: 0/1000; Time: 9s(total), 9s(copy); streamer: mysql.000036:242183405; Lag: 0.01s, State: migrating; ETA: 7s
Copy: 613000/993705 61.7%; Applied: 0; Backlog: 0/1000; Time: 10s(total), 10s(copy); streamer: mysql.000036:247992165; Lag: 0.01s, State: migrating; ETA: 6s
Copy: 685000/993705 68.9%; Applied: 0; Backlog: 0/1000; Time: 11s(total), 11s(copy); streamer: mysql.000036:254182759; Lag: 0.02s, State: migrating; ETA: 4s
Copy: 759000/993705 76.4%; Applied: 0; Backlog: 0/1000; Time: 12s(total), 12s(copy); streamer: mysql.000036:260524364; Lag: 0.11s, State: migrating; ETA: 3s
Copy: 834000/993705 83.9%; Applied: 0; Backlog: 0/1000; Time: 13s(total), 13s(copy); streamer: mysql.000036:266952443; Lag: 0.01s, State: migrating; ETA: 2s
Copy: 905000/993705 91.1%; Applied: 0; Backlog: 0/1000; Time: 14s(total), 14s(copy); streamer: mysql.000036:273037539; Lag: 0.01s, State: migrating; ETA: 1s
Copy: 975000/993705 98.1%; Applied: 0; Backlog: 0/1000; Time: 15s(total), 15s(copy); streamer: mysql.000036:279037441; Lag: 0.01s, State: migrating; ETA: 0s
2023-02-03 14:55:44 INFO Row copy complete&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ Copy 완료 후 정상 확인&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1675585896929&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; show tables;
+---------------+
| Tables_in_kim |
+---------------+
| _test_tbl_ghc |
| _test_tbl_gho |
| kim           |
| test_tbl      |
+---------------+
4 rows in set (0.00 sec)



## copy후 해당 컬럼 추가되었는지 확인
mysql&amp;gt; desc _test_tbl_gho;
+--------+--------------+------+-----+---------+----------------+
| Field  | Type         | Null | Key | Default | Extra          |
+--------+--------------+------+-----+---------+----------------+
| a      | int          | NO   | PRI | NULL    | auto_increment |
| b      | varchar(100) | YES  |     | NULL    |                |
| c      | varchar(100) | YES  |     | NULL    |                |
| ghost5 | int          | NO   |     | 0       |                |
+--------+--------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)




mysql&amp;gt; select count(*) from  test_tbl;
+----------+
| count(*) |
+----------+
|  1000142 |
+----------+
1 row in set (0.20 sec)

mysql&amp;gt; select count(*) from _test_tbl_gho;
+----------+
| count(*) |
+----------+
|  1000142 |
+----------+
1 row in set (0.14 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ 수동 Rename 필요&amp;nbsp;&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;=&amp;gt; 찾아보기론 rename까지 지원해주지 않는 것으로 보입니다. 하지만 아래와 같이 커뮤니티에서는 그냥 rename하면 된다고 합니다..&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;테이블 이름 바꾸기는 빠른 작업입니다. MySQL 메타데이터만 변경합니다. 따라서 gh-ost가 필요하지 않습니다. DDL을 직접 실행할 수 있습니다.&lt;/div&gt;
&lt;div&gt;이전에는 RENAME TABLE을 실행하려면 LOCK TABLES로 잠긴 테이블이 없어야 했습니다. 이제 WRITE 잠금으로 잠겨 있거나 다중 테이블 이름 바꾸기 작업의 이전 단계에서 WRITE 잠금 테이블의 이름을 바꾼 제품인 테이블의 이름을 바꿀 수 있습니다.&lt;/div&gt;
&lt;pre id=&quot;code_1675650082146&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;## rename 하는 당시에 AS-IS에 들어온 데이터를 손수 발라서 TO-BE에 넣어줄 수 없기때문에 원본테이블과 임시 테이블 모두 Write lock 잡고는 것이 좋아보입니다.
master&amp;gt; lock tables test_tbl write, _test_tbl_gho write;

mysql&amp;gt; rename /* gh-ost */ table `kim`.`test_tbl` to `kim`.`test_tbl_old`, `kim`.`_test_tbl_gho` to `kim`.`test_tbl`;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;작업중 일시 정지&lt;/b&gt;&lt;/blockquote&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;■ /tmp에 throttle.flag 파일을 생성&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1675585943553&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@master ~]# touch /tmp/throttle.flag&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ 작업 일시 정지&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1675585983435&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;...
Copy: 1000000/1000000 100.0%; Applied: 0; Backlog: 0/1000; Time: 3m0s(total), 15s(copy); streamer: mysql.000036:174604910; Lag: 0.01s, State: postponing cut-over; ETA: due
Copy: 1000000/1000000 100.0%; Applied: 0; Backlog: 0/1000; Time: 3m30s(total), 15s(copy); streamer: mysql.000036:174733742; Lag: 0.01s, State: postponing cut-over; ETA: due
Copy: 1000000/1000000 100.0%; Applied: 0; Backlog: 0/1000; Time: 4m0s(total), 15s(copy); streamer: mysql.000036:174861916; Lag: 0.01s, State: postponing cut-over; ETA: due&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;■&lt;b&gt; throttle.flag 파일 삭제&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1675585998193&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@master tmp]# rm -rf throttle.flag&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ 작업 재개&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1675586014887&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;...
Copy: 1000000/1000000 100.0%; Applied: 0; Backlog: 0/1000; Time: 3m0s(total), 15s(copy); streamer: mysql.000036:174604910; Lag: 0.01s, State: postponing cut-over; ETA: due
Copy: 1000000/1000000 100.0%; Applied: 0; Backlog: 0/1000; Time: 3m30s(total), 15s(copy); streamer: mysql.000036:174733742; Lag: 0.01s, State: postponing cut-over; ETA: due
Copy: 1000000/1000000 100.0%; Applied: 0; Backlog: 0/1000; Time: 4m0s(total), 15s(copy); streamer: mysql.000036:174861916; Lag: 0.01s, State: postponing cut-over; ETA: due
Copy: 1000000/1000000 100.0%; Applied: 0; Backlog: 0/1000; Time: 4m30s(total), 15s(copy); streamer: mysql.000036:174990818; Lag: 0.01s, State: postponing cut-over; ETA: due&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;panic으로 인한 작업 중단&lt;/b&gt;&lt;/blockquote&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;■&lt;b&gt; panic 파일 생성&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1675586080817&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@master ~]# touch /tmp/ghost.panic.flag&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ 작업 정지됨&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1675586094001&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;...
Copy: 1000000/1000000 100.0%; Applied: 0; Backlog: 0/1000; Time: 5m0s(total), 15s(copy); streamer: mysql.000036:175118958; Lag: 0.01s, State: postponing cut-over; ETA: due
Copy: 1000000/1000000 100.0%; Applied: 0; Backlog: 0/1000; Time: 5m30s(total), 15s(copy); streamer: mysql.000036:175247130; Lag: 0.01s, State: postponing cut-over; ETA: due
2023-02-03 13:20:53 FATAL Found panic-file /tmp/ghost.panic.flag. Aborting without cleanup&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ 작업 테이블이 남아 있으므로 수동 삭제 필요&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1675586114883&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; show tables;
+---------------+
| Tables_in_kim |
+---------------+
| _test_tbl_ghc |
| _test_tbl_gho |
| kim           |
| test_tbl      |
+---------------+
4 rows in set (0.00 sec)



mysql&amp;gt; drop table _test_tbl_ghc;
Query OK, 0 rows affected (0.01 sec)

mysql&amp;gt; drop table _test_tbl_gho;
Query OK, 0 rows affected (0.05 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;참고&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;a href=&quot;https://kimdubi.github.io/mysql/online_schema_change/&quot;&gt;https://kimdubi.github.io/mysql/online_schema_change/&lt;/a&gt;
&lt;figure id=&quot;og_1675585277905&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;MySQL online DDL을 위한 TOOL 비교 ( pt-osc &amp;amp; gh-ost )&quot; data-og-description=&quot;MySQL online DDL을 위한 TOOL pt-osc &amp;amp; gh-ost ONLINE DDL MySQL은 DDL에 대해서 한정적으로 online 작업을 지원합니다. online ddl 방식으로는 INPLACE, INSTANT (mysql 8.0부터) 가 있고 주로 쓰이는 algorithm=INPLACE 방식은 아&quot; data-og-host=&quot;kimdubi.github.io&quot; data-og-source-url=&quot;https://kimdubi.github.io/mysql/online_schema_change/&quot; data-og-url=&quot;https://kimdubi.github.io/mysql/online_schema_change/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/q7jvC/hyRvootKNE/dDaxAr5gLM7pOo97kdpt11/img.png?width=1766&amp;amp;height=780&amp;amp;face=0_0_1766_780&quot;&gt;&lt;a href=&quot;https://kimdubi.github.io/mysql/online_schema_change/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://kimdubi.github.io/mysql/online_schema_change/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/q7jvC/hyRvootKNE/dDaxAr5gLM7pOo97kdpt11/img.png?width=1766&amp;amp;height=780&amp;amp;face=0_0_1766_780');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;MySQL online DDL을 위한 TOOL 비교 ( pt-osc &amp;amp; gh-ost )&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;MySQL online DDL을 위한 TOOL pt-osc &amp;amp; gh-ost ONLINE DDL MySQL은 DDL에 대해서 한정적으로 online 작업을 지원합니다. online ddl 방식으로는 INPLACE, INSTANT (mysql 8.0부터) 가 있고 주로 쓰이는 algorithm=INPLACE 방식은 아&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;kimdubi.github.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;/div&gt;</description>
      <category>Others/Opensource Tool</category>
      <category>Gh-ost</category>
      <category>mysql</category>
      <category>online-ddl</category>
      <author>jeonghyun</author>
      <guid isPermaLink="true">https://jhdatabase.tistory.com/137</guid>
      <comments>https://jhdatabase.tistory.com/entry/MySQL-Online-DDL-use-Gh-ost#entry137comment</comments>
      <pubDate>Sun, 5 Feb 2023 17:39:10 +0900</pubDate>
    </item>
    <item>
      <title>[MySQL - Orchestrator VIP설정 part 3 use. Keepalived]</title>
      <link>https://jhdatabase.tistory.com/entry/MySQL-Orchestrator-VIP%EC%84%A4%EC%A0%95-part-3-use-Keepalived</link>
      <description>&lt;div&gt;&lt;b&gt;&lt;span&gt;&lt;u&gt;Orchestrator 나 MHA 와 같은 HA 툴의 경우 Failover 등의 가용성 기능을 제공을 하지만 VIP 리소스 에 대한 기능은 제공하지 않아&amp;nbsp;&amp;nbsp;별도의 스크립트 등으로 구현 해서 사용&lt;/u&gt; 해야 합니다.&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;물론 hooking이 되는 파라미터 나 스크립트 내 호출 함수 등에 대한 정보, 사용시 수정 해야할 사항 등은 정보가 제공되지만 VIP 를 Assign 하고 Relocate 하는 등의 실제 동작하는 부분에 해당하는 스크립트나 프로그램은 별도로 작성이 필요로 합니다.&lt;/div&gt;
&lt;div&gt;따라서 저같은 경우에는 keepalived 툴을 사용하여 VIP 관리 할 예정입니다.&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;Keepalived란?&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;'로드밸런싱'과 '고가용성(HA)'를 제공하는 프레임워크.&lt;/div&gt;
&lt;div&gt;-. 로드밸런싱은 L4 수준의 로드 밸런싱(HAProxy와 함께 사용하면, L7 로드밸런싱도 가능)&lt;/div&gt;
&lt;div&gt;-. 고가용성(HA)은 VRRP 프로토콜을 사용한 VIP로 고가용성이 가능.&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;[Keepalived의 고가용성(HA) 동작방식]&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2687&quot; data-origin-height=&quot;1033&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kRsxI/btrX3ZXoMS8/KHB9F6TTnUIgahUTVfkHQ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kRsxI/btrX3ZXoMS8/KHB9F6TTnUIgahUTVfkHQ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kRsxI/btrX3ZXoMS8/KHB9F6TTnUIgahUTVfkHQ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkRsxI%2FbtrX3ZXoMS8%2FKHB9F6TTnUIgahUTVfkHQ1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2687&quot; height=&quot;1033&quot; data-origin-width=&quot;2687&quot; data-origin-height=&quot;1033&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;사전 작업&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #666666;&quot;&gt;VIP 생성 (Master,Slave)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1675582946009&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@master network-scripts]# vi ifcfg-eth1:0

DEVICE=eth1:0
IPADDR=192.168.100.40
NETMASK=255.255.255.0
BROADCAST=127.255.255.255
ONBOOT=NO&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ keepalived 설치&lt;/span&gt;&lt;span&gt;(Master, Slave)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1675582977101&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@master ~]# yum -y install keepalived&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ Config 설정&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;router_id&lt;/span&gt;&lt;/b&gt; : 서버별 다르게 임의의 이름 지정.&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;state&lt;/span&gt; &lt;/b&gt;:&amp;nbsp; MASTER와 BACKUP을 지정 가능. VIP를 가질 MASTER 서버는 MASTER로 그 외 MASTER가 죽었을 때 대체될 서버는 BACKUP으로 지정.&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;b&gt;interface&lt;/b&gt; :&lt;/span&gt;&amp;nbsp;가상 IP를 부여할 이더넷 장치&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;b&gt;virtual_router_id&lt;/b&gt; :&amp;nbsp;&lt;/span&gt;일종의 그룹ID로 이 값은 가상 IP가 할당될 MASTER와 BACKUP모두 동일한 값으로 기재&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;b&gt;priority&lt;/b&gt; :&lt;/span&gt; 여러대의 서버가 묶여 있을 때 우선적으로 가상 ip를 할당할 우선순위를 지정하는 값으로 가장 높은 값을 가진 쪽이 우선으로합니다. MASTER 쪽에 가장 높은 값을 그 외 SLAVE서버에 순차적으로 작은 값을 지정. =&amp;gt; failover이후에 원래 Slave였던 서버를 Master로 쓸 계획이기 때문에&amp;nbsp;저는 동일한 값을 주었습니다.&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;b&gt;virtual_ipaddress&lt;/b&gt; :&lt;/span&gt; 가상ip를 지정&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span style=&quot;color: #3665ee;&quot;&gt;&amp;lt;Master&amp;gt;&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1675583021349&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@master keepalived]# vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
   router_id MySQL_0
}

vrrp_script chk_mysql_port {
    script &quot;/mysql/chk_mysql.sh&quot;
    interval 2
    weight -5
    fall 2
    rise 1
}

vrrp_instance VI_1 {
    state MASTER
    interface eth1
    mcast_src_ip 192.168.100.35
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.100.40/24
    }

track_script {
   chk_mysql_port
}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span style=&quot;color: #3665ee;&quot;&gt;&amp;lt;Slave&amp;gt;&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1675583279535&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@slave keepalived]# vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
   router_id MySQL_0
}

vrrp_script chk_mysql_port {
    script &quot;/mysql/chk_mysql.sh&quot;
    interval 2
    weight -5
    fall 2
    rise 1
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth1
    mcast_src_ip 192.168.100.36
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.100.40
    }

track_script {
   chk_mysql_port
}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ mysql 모니터링 스크립트 생성&amp;nbsp;&lt;/span&gt;&lt;span&gt;(Master, Slave)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1675583295213&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@master ~]# vi /mysql/chk_mysql.sh

#!/bin/bash
counter=$(netstat -na|grep &quot;LISTEN&quot;|grep &quot;3306&quot;|wc -l)
if [ &quot;${counter}&quot; -eq 0 ]; then
    systemctl stop keepalived
fi&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ keepalived 실행 (Master, Slave)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;u&gt;&lt;b&gt;설정이 완료되면 MySQL 데이터베이스를 시작하고 keepalive를 시작&lt;/b&gt;&lt;/u&gt;합니다. &lt;span&gt;Keepalive는 MySQL이 시작된 후 실행 상태를 감지하므로 MySQL을 먼저 시작하고 keepalive를 시작하는지 주의해야 합니다.&amp;nbsp;&lt;/span&gt;MySQL이 비정상적으로 실행되면 keepalive가 자동으로 종료됩니다.&amp;nbsp;&lt;/div&gt;
&lt;pre id=&quot;code_1675583415818&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@master ~]# systemctl start keepalived.service

[root@master ~]# systemctl status keepalived.service
● keepalived.service - LVS and VRRP High Availability Monitor
   Loaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; vendor preset: disabled)
   Active: active (running) since Wed 2023-02-01 12:42:08 KST; 5min ago
  Process: 14189 ExecStart=/usr/sbin/keepalived $KEEPALIVED_OPTIONS (code=exited, status=0/SUCCESS)
Main PID: 14190 (keepalived)
   CGroup: /system.slice/keepalived.service
           ├─14190 /usr/sbin/keepalived -D
           ├─14191 /usr/sbin/keepalived -D
           └─14192 /usr/sbin/keepalived -D

Feb 01 12:42:10 master Keepalived_vrrp[14192]: Sending gratuitous ARP on eth1 for 192.168.100.40
Feb 01 12:42:10 master Keepalived_vrrp[14192]: Sending gratuitous ARP on eth1 for 192.168.100.40
Feb 01 12:42:10 master Keepalived_vrrp[14192]: Sending gratuitous ARP on eth1 for 192.168.100.40
Feb 01 12:42:10 master Keepalived_vrrp[14192]: Sending gratuitous ARP on eth1 for 192.168.100.40
Feb 01 12:42:15 master Keepalived_vrrp[14192]: Sending gratuitous ARP on eth1 for 192.168.100.40
Feb 01 12:42:15 master Keepalived_vrrp[14192]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on eth1 for 192.168.100.40
Feb 01 12:42:15 master Keepalived_vrrp[14192]: Sending gratuitous ARP on eth1 for 192.168.100.40
Feb 01 12:42:15 master Keepalived_vrrp[14192]: Sending gratuitous ARP on eth1 for 192.168.100.40
Feb 01 12:42:15 master Keepalived_vrrp[14192]: Sending gratuitous ARP on eth1 for 192.168.100.40
Feb 01 12:42:15 master Keepalived_vrrp[14192]: Sending gratuitous ARP on eth1 for 192.168.100.40&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ VIP 확인&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;현재 Master에 할당되어 있다.&lt;/div&gt;
&lt;/div&gt;
&lt;pre id=&quot;code_1675583432218&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@master ~]# ip addr
1: lo: &amp;lt;LOOPBACK,UP,LOWER_UP&amp;gt; mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether f2:20:cd:e2:5f:a4 brd ff:ff:ff:ff:ff:ff
    inet 10.41.134.200/23 brd 10.41.135.255 scope global dynamic eth0
       valid_lft 946067001sec preferred_lft 946067001sec
3: eth1: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether f2:d7:cf:db:25:ed brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.35/24 brd 127.255.255.255 scope global eth1
       valid_lft forever preferred_lft forever
    inet 192.168.100.40/24 scope global secondary eth1
       valid_lft forever preferred_lft forever




[root@slave ~]# ip addr
1: lo: &amp;lt;LOOPBACK,UP,LOWER_UP&amp;gt; mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether f2:20:cd:2e:e6:ca brd ff:ff:ff:ff:ff:ff
    inet 10.41.174.129/23 brd 10.41.175.255 scope global dynamic eth0
       valid_lft 945881359sec preferred_lft 945881359sec
3: eth1: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether f2:d7:cf:cc:bb:f0 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.36/24 brd 127.255.255.255 scope global eth1
       valid_lft forever preferred_lft forever&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;Failover Test (VIP relocate test)&lt;/b&gt;&lt;/blockquote&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ MySQL kill&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1675583507346&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@master ~]# ps -ef | grep mysql
mysql    28461 24284  0 15:40 pts/1    00:00:01 mysqld --user=mysql
root     29346 24284  0 15:43 pts/1    00:00:00 grep --color=auto mysql


[root@master ~]# kill -9 28461&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ Master VIP 확인 =&amp;gt; vip없음&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1675583524208&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@master ~]# ip addr
1: lo: &amp;lt;LOOPBACK,UP,LOWER_UP&amp;gt; mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether f2:20:cd:e2:5f:a4 brd ff:ff:ff:ff:ff:ff
    inet 10.41.134.200/23 brd 10.41.135.255 scope global dynamic eth0
       valid_lft 946056559sec preferred_lft 946056559sec
3: eth1: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether f2:d7:cf:db:25:ed brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.35/24 brd 127.255.255.255 scope global eth1
       valid_lft forever preferred_lft forever&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ Slave VIP확인&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;Master의 VIP가 Slave서버에 할당되어 있다.&lt;/div&gt;
&lt;pre id=&quot;code_1675583538755&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@slave ~]# ip addr
1: lo: &amp;lt;LOOPBACK,UP,LOWER_UP&amp;gt; mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether f2:20:cd:2e:e6:ca brd ff:ff:ff:ff:ff:ff
    inet 10.41.174.129/23 brd 10.41.175.255 scope global dynamic eth0
       valid_lft 945881675sec preferred_lft 945881675sec
3: eth1: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether f2:d7:cf:cc:bb:f0 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.36/24 brd 127.255.255.255 scope global eth1
       valid_lft forever preferred_lft forever
    inet 192.168.100.40/32 scope global eth1
       valid_lft forever preferred_lft forever&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ keepalived 상태 확인&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;=&amp;gt; mysql을 모니터링하는 스크립트가 mysql이 내려갔음을 감지하고 keepalived를 끈다.&lt;/span&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1675583555505&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@master ~]# systemctl status keepalived.service
● keepalived.service - LVS and VRRP High Availability Monitor
   Loaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; vendor preset: disabled)
   Active: inactive (dead)

Feb 01 15:40:20 master Keepalived_vrrp[28537]: Sending gratuitous ARP on eth1 for 192.16...40
Feb 01 15:40:20 master Keepalived_vrrp[28537]: Sending gratuitous ARP on eth1 for 192.16...40
Feb 01 15:40:20 master Keepalived_vrrp[28537]: Sending gratuitous ARP on eth1 for 192.16...40
Feb 01 15:43:22 master Keepalived[28535]: Stopping
Feb 01 15:43:22 master systemd[1]: Stopping LVS and VRRP High Availability Monitor...
Feb 01 15:43:22 master Keepalived_vrrp[28537]: VRRP_Instance(VI_1) sent 0 priority
Feb 01 15:43:22 master Keepalived_vrrp[28537]: VRRP_Instance(VI_1) removing protocol VIPs.
Feb 01 15:43:22 master Keepalived_healthcheckers[28536]: Stopped
Feb 01 15:43:23 master Keepalived_vrrp[28537]: Stopped
Feb 01 15:43:23 master systemd[1]: Stopped LVS and VRRP High Availability Monitor.
Hint: Some lines were ellipsized, use -l to show in full.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ Log&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1675583576545&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@master ~]# tail -200f /var/log/messages
...
Feb  1 15:43:22 localhost Keepalived[28535]: Stopping
Feb  1 15:43:22 localhost systemd: Stopping LVS and VRRP High Availability Monitor...
Feb  1 15:43:22 localhost Keepalived_vrrp[28537]: VRRP_Instance(VI_1) sent 0 priority
Feb  1 15:43:22 localhost Keepalived_vrrp[28537]: VRRP_Instance(VI_1) removing protocol VIPs.
Feb  1 15:43:22 localhost Keepalived_healthcheckers[28536]: Stopped
Feb  1 15:43:23 localhost Keepalived_vrrp[28537]: Stopped
Feb  1 15:43:23 localhost Keepalived[28535]: Stopped Keepalived v1.3.5 (03/19,2017), git commit v1.3.5-6-g6fa32f2
Feb  1 15:43:23 localhost systemd: Stopped LVS and VRRP High Availability Monitor.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;OS 다운 failover test&lt;/b&gt;&lt;/blockquote&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ Master서버 down&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1675583632388&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@master ~]# shutdown
Shutdown scheduled for Wed 2023-02-01 15:55:13 KST, use 'shutdown -c' to cancel.
[root@master ~]#
Broadcast message from root@master (Wed 2023-02-01 15:54:13 KST):

The system is going down for power-off at Wed 2023-02-01 15:55:13 KST!&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;■ orchestrator 장애감지&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1909&quot; data-origin-height=&quot;342&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4C7O9/btrX3rfBbeD/WUwUzI8q0xt5Hgb8Tnb3Ik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4C7O9/btrX3rfBbeD/WUwUzI8q0xt5Hgb8Tnb3Ik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4C7O9/btrX3rfBbeD/WUwUzI8q0xt5Hgb8Tnb3Ik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4C7O9%2FbtrX3rfBbeD%2FWUwUzI8q0xt5Hgb8Tnb3Ik%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1909&quot; height=&quot;342&quot; data-origin-width=&quot;1909&quot; data-origin-height=&quot;342&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;■ Slave서버 Master로 승격&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1129&quot; data-origin-height=&quot;435&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cD9Eeg/btrX4lF2shk/f8TC9Sn8Ru4TAcqlsTEFOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cD9Eeg/btrX4lF2shk/f8TC9Sn8Ru4TAcqlsTEFOK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cD9Eeg/btrX4lF2shk/f8TC9Sn8Ru4TAcqlsTEFOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcD9Eeg%2FbtrX4lF2shk%2Ff8TC9Sn8Ru4TAcqlsTEFOK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1129&quot; height=&quot;435&quot; data-origin-width=&quot;1129&quot; data-origin-height=&quot;435&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;■ VIP 절체 확인 (Slave)&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1675583709785&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@slave ~]# ip addr
1: lo: &amp;lt;LOOPBACK,UP,LOWER_UP&amp;gt; mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether f2:20:cd:2e:e6:ca brd ff:ff:ff:ff:ff:ff
    inet 10.41.174.129/23 brd 10.41.175.255 scope global dynamic eth0
       valid_lft 945880850sec preferred_lft 945880850sec
3: eth1: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether f2:d7:cf:cc:bb:f0 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.36/24 brd 127.255.255.255 scope global eth1
       valid_lft forever preferred_lft forever
    inet 192.168.100.40/32 scope global eth1
       valid_lft forever preferred_lft forever




[root@slave ~]# mysql -uorchestrator -porchestrator -h 192.168.100.40
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 201
Server version: 8.0.28 MySQL Community Server - GPL

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql&amp;gt; select @@hostname;
+------------+
| @@hostname |
+------------+
| slave      |
+------------+
1 row in set (0.00 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 테스트는 NCP 클라우드에서 진행 되었습니다, (Classic 환경)&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Keepalived는 vip alias 방식으로 통제를 하여 VPC환경에서는 사용이 불가능합니다..VPC환경에서는 pacemaker + corosync를 사용하시는 것을 권장드립니다,ㅎㅎ&lt;/p&gt;</description>
      <category>DataBase/MySQL &amp;amp; MariaDB</category>
      <category>keepalived</category>
      <category>orchestrator</category>
      <author>jeonghyun</author>
      <guid isPermaLink="true">https://jhdatabase.tistory.com/136</guid>
      <comments>https://jhdatabase.tistory.com/entry/MySQL-Orchestrator-VIP%EC%84%A4%EC%A0%95-part-3-use-Keepalived#entry136comment</comments>
      <pubDate>Sun, 5 Feb 2023 17:10:35 +0900</pubDate>
    </item>
    <item>
      <title>[MySQL - Orchestrator Takeover &amp;amp; Failover 테스트] part 2</title>
      <link>https://jhdatabase.tistory.com/entry/MySQL-Orchestrator-Takeover-Failover-%ED%85%8C%EC%8A%A4%ED%8A%B8-part-2</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Orchestrator 구축 이후 Takeover 및 Auto Failover를 설정하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Orchestrator 구축 1편 : &lt;a href=&quot;https://jhdatabase.tistory.com/134&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://jhdatabase.tistory.com/134&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1675581689756&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[MySQL - Orchestrator 구축] part 1&quot; data-og-description=&quot;Orchestrator란? MySQL용 복제 토폴로지 관리자로써 고가용성 및 복제 관리 툴입니다. 체인을 위아래로 훑으면서 마스터와 슬레이브를 찾아 MySQL 환경의 복제 토폴로지를 검색하는 기능을 제공합니다&quot; data-og-host=&quot;jhdatabase.tistory.com&quot; data-og-source-url=&quot;https://jhdatabase.tistory.com/134&quot; data-og-url=&quot;https://jhdatabase.tistory.com/134&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bxJr01/hyRvlysxcP/RmSyaiJDhrObNsdwzDL1N1/img.png?width=451&amp;amp;height=358&amp;amp;face=0_0_451_358,https://scrap.kakaocdn.net/dn/rnGSP/hyRwEXt5G7/pMqKVaz8AgH3elnAxFwpIk/img.png?width=451&amp;amp;height=358&amp;amp;face=0_0_451_358,https://scrap.kakaocdn.net/dn/bJYTlG/hyRvmRFstu/qP2aeqQxuSxTxRBkMKIZBk/img.png?width=1379&amp;amp;height=913&amp;amp;face=0_0_1379_913&quot;&gt;&lt;a href=&quot;https://jhdatabase.tistory.com/134&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://jhdatabase.tistory.com/134&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bxJr01/hyRvlysxcP/RmSyaiJDhrObNsdwzDL1N1/img.png?width=451&amp;amp;height=358&amp;amp;face=0_0_451_358,https://scrap.kakaocdn.net/dn/rnGSP/hyRwEXt5G7/pMqKVaz8AgH3elnAxFwpIk/img.png?width=451&amp;amp;height=358&amp;amp;face=0_0_451_358,https://scrap.kakaocdn.net/dn/bJYTlG/hyRvmRFstu/qP2aeqQxuSxTxRBkMKIZBk/img.png?width=1379&amp;amp;height=913&amp;amp;face=0_0_1379_913');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[MySQL - Orchestrator 구축] part 1&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Orchestrator란? MySQL용 복제 토폴로지 관리자로써 고가용성 및 복제 관리 툴입니다. 체인을 위아래로 훑으면서 마스터와 슬레이브를 찾아 MySQL 환경의 복제 토폴로지를 검색하는 기능을 제공합니다&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;jhdatabase.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;Takeover Test&lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ Master 확인&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;현재 Master -&amp;gt; &lt;span style=&quot;color: #3665ee;&quot;&gt;192.168.100.35&amp;nbsp;&lt;/span&gt;(DB 1번)&lt;/div&gt;
&lt;pre id=&quot;code_1675581783389&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for source to send event
                  Master_Host: 192.168.100.35
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql.000009
          Read_Master_Log_Pos: 94146
               Relay_Log_File: mysql-relay-bin.000002
                Relay_Log_Pos: 2522
        Relay_Master_Log_File: mysql.000009
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;■&amp;nbsp;&lt;span&gt;Orchestrator 관리 창에서 Slave 노드를 화살표 방향대로 Drag &amp;amp; Drop 합니다.&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;842&quot; data-origin-height=&quot;329&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ztsSq/btrX6iINkja/f0HMG5kh2Qs7iKewOB6qX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ztsSq/btrX6iINkja/f0HMG5kh2Qs7iKewOB6qX1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ztsSq/btrX6iINkja/f0HMG5kh2Qs7iKewOB6qX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FztsSq%2FbtrX6iINkja%2Ff0HMG5kh2Qs7iKewOB6qX1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;842&quot; height=&quot;329&quot; data-origin-width=&quot;842&quot; data-origin-height=&quot;329&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ OK 클릭&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;628&quot; data-origin-height=&quot;245&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lYHmM/btrX4YRlQZK/FK0eCtPkgKfoD3KCZnK8hK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lYHmM/btrX4YRlQZK/FK0eCtPkgKfoD3KCZnK8hK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lYHmM/btrX4YRlQZK/FK0eCtPkgKfoD3KCZnK8hK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlYHmM%2FbtrX4YRlQZK%2FFK0eCtPkgKfoD3KCZnK8hK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;628&quot; height=&quot;245&quot; data-origin-width=&quot;628&quot; data-origin-height=&quot;245&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ Slave노드의 톱니바퀴 클릭&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;963&quot; data-origin-height=&quot;403&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ky2LB/btrX6oITMoL/CDoRLJiQy4epOUH5n7Mzm0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ky2LB/btrX6oITMoL/CDoRLJiQy4epOUH5n7Mzm0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ky2LB/btrX6oITMoL/CDoRLJiQy4epOUH5n7Mzm0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKy2LB%2FbtrX6oITMoL%2FCDoRLJiQy4epOUH5n7Mzm0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;963&quot; height=&quot;403&quot; data-origin-width=&quot;963&quot; data-origin-height=&quot;403&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■&amp;nbsp;&lt;/span&gt;&lt;span&gt;새롭게 Master가된 노드에 동기화가 될 수 있도록 설정&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;Replication 시작 클릭&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;745&quot; data-origin-height=&quot;914&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xVsTZ/btrX2nLz9zl/bYs51Wbic3eVZ7ejjO7Bv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xVsTZ/btrX2nLz9zl/bYs51Wbic3eVZ7ejjO7Bv0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xVsTZ/btrX2nLz9zl/bYs51Wbic3eVZ7ejjO7Bv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxVsTZ%2FbtrX2nLz9zl%2FbYs51Wbic3eVZ7ejjO7Bv0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;745&quot; height=&quot;914&quot; data-origin-width=&quot;745&quot; data-origin-height=&quot;914&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ Master 확인&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;현재 Master -&amp;gt; &lt;span style=&quot;color: #3665ee;&quot;&gt;192.168.100.36&amp;nbsp;&lt;/span&gt;(DB 2번)&lt;/div&gt;
&lt;pre id=&quot;code_1675581982779&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for source to send event
                  Master_Host: 192.168.100.36
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql.000005
          Read_Master_Log_Pos: 175623
               Relay_Log_File: mysql-relay-bin.000002
                Relay_Log_Pos: 762
        Relay_Master_Log_File: mysql.000005
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;820&quot; data-origin-height=&quot;401&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZ9BvU/btrX3sMrUEC/WLmdzuOKkOAME5kGrMta4K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZ9BvU/btrX3sMrUEC/WLmdzuOKkOAME5kGrMta4K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZ9BvU/btrX3sMrUEC/WLmdzuOKkOAME5kGrMta4K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZ9BvU%2FbtrX3sMrUEC%2FWLmdzuOKkOAME5kGrMta4K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;820&quot; height=&quot;401&quot; data-origin-width=&quot;820&quot; data-origin-height=&quot;401&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;Failover Test (Manual)&lt;/b&gt;&lt;/blockquote&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ Master 확인&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;현재 Master -&amp;gt;&amp;nbsp;&lt;/span&gt;현재 Master -&amp;gt; &lt;span style=&quot;color: #3665ee;&quot;&gt;192.168.100.35&amp;nbsp;&lt;/span&gt;(DB 1번)&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;737&quot; data-origin-height=&quot;299&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mv2XB/btrYdjfJATG/2WP6vsNmysnN2eleElfXhK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mv2XB/btrYdjfJATG/2WP6vsNmysnN2eleElfXhK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mv2XB/btrYdjfJATG/2WP6vsNmysnN2eleElfXhK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fmv2XB%2FbtrYdjfJATG%2F2WP6vsNmysnN2eleElfXhK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;737&quot; height=&quot;299&quot; data-origin-width=&quot;737&quot; data-origin-height=&quot;299&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ Master DB kill&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1675582088768&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@master ~]# ps -ef | grep mysql
mysql     5178 53757  0 15:32 pts/1    00:00:39 mysqld --user=mysql
root      6114  6077  0 Jan26 ?        00:06:31 /usr/local/percona/pmm2/exporters/mysqld_exporter --collect.auto_increment.columns --collect.binlog_size --collect.custom_query.hr --collect.custom_query.hr.directory=/usr/local/percona/pmm2/collectors/custom-queries/mysql/high-resolution --collect.custom_query.lr --collect.custom_query.lr.directory=/usr/local/percona/pmm2/collectors/custom-queries/mysql/low-resolution --collect.custom_query.mr --collect.custom_query.mr.directory=/usr/local/percona/pmm2/collectors/custom-queries/mysql/medium-resolution --collect.engine_innodb_status --collect.engine_tokudb_status --collect.global_status --collect.global_variables --collect.heartbeat --collect.info_schema.clientstats --collect.info_schema.innodb_cmp --collect.info_schema.innodb_cmpmem --collect.info_schema.innodb_metrics --collect.info_schema.innodb_tablespaces --collect.info_schema.processlist --collect.info_schema.query_response_time --collect.info_schema.tables --collect.info_schema.tablestats --collect.info_schema.userstats --collect.perf_schema.eventsstatements --collect.perf_schema.eventswaits --collect.perf_schema.file_events --collect.perf_schema.file_instances --collect.perf_schema.indexiowaits --collect.perf_schema.tableiowaits --collect.perf_schema.tablelocks --collect.slave_status --collect.standard.go --collect.standard.process --exporter.conn-max-lifetime=55s --exporter.global-conn-pool --exporter.max-idle-conns=3 --exporter.max-open-conns=3 --log.level=warn --web.listen-address=:42002
root      8903 53757  0 16:55 pts/1    00:00:00 grep --color=auto mysql


[root@master ~]# kill -9 5178&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ 장애 감지 확인&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1914&quot; data-origin-height=&quot;395&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rHrfc/btrX41UIztP/Urk9xL6lMdDCjUakvQU9XK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rHrfc/btrX41UIztP/Urk9xL6lMdDCjUakvQU9XK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rHrfc/btrX41UIztP/Urk9xL6lMdDCjUakvQU9XK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrHrfc%2FbtrX41UIztP%2FUrk9xL6lMdDCjUakvQU9XK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1914&quot; height=&quot;395&quot; data-origin-width=&quot;1914&quot; data-origin-height=&quot;395&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■&amp;nbsp;orchestrator log&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1675582124496&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@orchestrator tmp]# tail -200f /tmp/recovery.log
...
Detected DeadMaster on 192.168.100.35:3306. Affected replicas: 1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ Master로 승격될 노드 선택&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;Recover -&amp;gt; 승격 대상 노드 클릭&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;721&quot; data-origin-height=&quot;325&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yIXT5/btrX8jAzfh3/oWvPokHKJXPUfsCqMUexD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yIXT5/btrX8jAzfh3/oWvPokHKJXPUfsCqMUexD0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yIXT5/btrX8jAzfh3/oWvPokHKJXPUfsCqMUexD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyIXT5%2FbtrX8jAzfh3%2FoWvPokHKJXPUfsCqMUexD0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;721&quot; height=&quot;325&quot; data-origin-width=&quot;721&quot; data-origin-height=&quot;325&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;■ 기존 Slave DB가 Master로 승격&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;893&quot; data-origin-height=&quot;362&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bw71j4/btrX3tdvUC2/EAdyHB8wfIukxvmCXFIJq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bw71j4/btrX3tdvUC2/EAdyHB8wfIukxvmCXFIJq1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bw71j4/btrX3tdvUC2/EAdyHB8wfIukxvmCXFIJq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbw71j4%2FbtrX3tdvUC2%2FEAdyHB8wfIukxvmCXFIJq1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;893&quot; height=&quot;362&quot; data-origin-width=&quot;893&quot; data-origin-height=&quot;362&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ Slave DB Rejoin&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;Audit -&amp;gt; Recovery -&amp;gt;Hostname 클릭&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;binlog pos 와 파일명을 통해서 장애가 발생되어 복제에서 제외된 인스턴스를 다시 복제 Set 에 추가&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1889&quot; data-origin-height=&quot;271&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/U4b30/btrX2V82xkM/dtnuYpNZdFT5iDCkJ2aoSK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/U4b30/btrX2V82xkM/dtnuYpNZdFT5iDCkJ2aoSK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/U4b30/btrX2V82xkM/dtnuYpNZdFT5iDCkJ2aoSK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FU4b30%2FbtrX2V82xkM%2FdtnuYpNZdFT5iDCkJ2aoSK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1889&quot; height=&quot;271&quot; data-origin-width=&quot;1889&quot; data-origin-height=&quot;271&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;■ Binlog pos와 파일명 확인&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1874&quot; data-origin-height=&quot;919&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUU8JB/btrX6iPAMqf/ufj2nORK4GGiQJowQ3KtZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUU8JB/btrX6iPAMqf/ufj2nORK4GGiQJowQ3KtZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUU8JB/btrX6iPAMqf/ufj2nORK4GGiQJowQ3KtZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUU8JB%2FbtrX6iPAMqf%2Fufj2nORK4GGiQJowQ3KtZK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1874&quot; height=&quot;919&quot; data-origin-width=&quot;1874&quot; data-origin-height=&quot;919&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ Replication 설정&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;위에서 확인한 binlog 파일과 pos번호를 가지고 change master 실행하여 replication 재구성&lt;/span&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1675582208844&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CHANGE MASTER TO MASTER_HOST='192.168.100.36', MASTER_USER='repl',MASTER_PASSWORD='repl',MASTER_PORT=3306,MASTER_LOG_FILE='mysql.000005', MASTER_LOG_POS=182342,MASTER_CONNECT_RETRY=10;


mysql&amp;gt; show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for source to send event
                  Master_Host: 192.168.100.36
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 10
              Master_Log_File: mysql.000005
          Read_Master_Log_Pos: 200602
               Relay_Log_File: mysql-relay-bin.000002
                Relay_Log_Pos: 18582
        Relay_Master_Log_File: mysql.000005
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ 재반영 확인&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;707&quot; data-origin-height=&quot;298&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbfVnV/btrX3tq2K4q/ZcixW8I972rEaWWY0yTmv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbfVnV/btrX3tq2K4q/ZcixW8I972rEaWWY0yTmv1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbfVnV/btrX3tq2K4q/ZcixW8I972rEaWWY0yTmv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbfVnV%2FbtrX3tq2K4q%2FZcixW8I972rEaWWY0yTmv1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;707&quot; height=&quot;298&quot; data-origin-width=&quot;707&quot; data-origin-height=&quot;298&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;Auto Failover 설정&lt;/b&gt;&lt;/blockquote&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;b&gt;Config Docs&lt;/b&gt;&amp;nbsp;&lt;/span&gt;:&amp;nbsp;&lt;a href=&quot;https://github.com/openark/orchestrator/blob/master/docs/configuration-recovery.md&quot;&gt;https://github.com/openark/orchestrator/blob/master/docs/configuration-recovery.md&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1675582258031&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - openark/orchestrator: MySQL replication topology management and HA&quot; data-og-description=&quot;MySQL replication topology management and HA. Contribute to openark/orchestrator development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/openark/orchestrator/blob/master/docs/configuration-recovery.md&quot; data-og-url=&quot;https://github.com/openark/orchestrator&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/P2Eym/hyRvkM5Mvn/0vhKNsrrMFfJ221NKChzYk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/openark/orchestrator/blob/master/docs/configuration-recovery.md&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/openark/orchestrator/blob/master/docs/configuration-recovery.md&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/P2Eym/hyRvkM5Mvn/0vhKNsrrMFfJ221NKChzYk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - openark/orchestrator: MySQL replication topology management and HA&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;MySQL replication topology management and HA. Contribute to openark/orchestrator development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Automated Recovery 실행 될 때 승격이 되는 노드를 전부(*) 또는 특정 1개 노드(인스턴스) 를 지정할 수 있습니다. (/etc/hosts에 기재된 alias로 수정)&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1675582270919&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@orchestrator ~]# vi /usr/local/orchestrator/orchestrator.conf.json
  &quot;RecoveryPeriodBlockSeconds&quot;: 30,
  &quot;RecoveryIgnoreHostnameFilters&quot;: [],
  &quot;RecoverMasterClusterFilters&quot;: [
    &quot;*&quot;
  ],
  &quot;RecoverIntermediateMasterClusterFilters&quot;: [
    &quot;*&quot;
  ],



## RecoverMasterClusterFilters =&amp;gt; Master 장애 대해서 자동 복구할 클러스터 를 지정
## PromotionIgnoreHostnameFilters =&amp;gt; Slave 노드 중에서 Master 로 Promote(승격) 대상에서 제외 할 Hostname(노드) 를 입력, 입력 하지 않으면 가용한 Slave 노드 중에서 승격
## RecoverIntermediateMasterClusterFilters =&amp;gt; 해당 파라미터는 복제 구성에서 중간 Master 에 대한 복구 여부를 설정하는 파라미터 입니다.
## RecoveryPeriodBlockSeconds =&amp;gt; 장애가 발생 후 자동 복구가 되면 위의 파라미터에 지정한 시간 동안은 자동 복구를 차단 하게 됩니다 Default 3600 (초), 한번 장애가 발생 되어서 자동 복구가 수행 된다면 3600초 안에는 장애가 발생 되어도 자동 복구가 수행되지 않음을 의미&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ Config reload&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;Home -&amp;gt; status -&amp;gt; Reload configuration 클릭&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;config수정 후 수정된 사항 반영&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1896&quot; data-origin-height=&quot;450&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ccGcXA/btrX40VPs3x/7r4oPxh7NtGucQaHWH4LQk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ccGcXA/btrX40VPs3x/7r4oPxh7NtGucQaHWH4LQk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ccGcXA/btrX40VPs3x/7r4oPxh7NtGucQaHWH4LQk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FccGcXA%2FbtrX40VPs3x%2F7r4oPxh7NtGucQaHWH4LQk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1896&quot; height=&quot;450&quot; data-origin-width=&quot;1896&quot; data-origin-height=&quot;450&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ Automated Recovery 설정 확인&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;해당 기능이 활성화되면 Dashboard에서 하트 표시됩니다.&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;845&quot; data-origin-height=&quot;214&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wfTwt/btrX9FQ0RvP/GzkpFgThx79se2z3tLswSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wfTwt/btrX9FQ0RvP/GzkpFgThx79se2z3tLswSk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wfTwt/btrX9FQ0RvP/GzkpFgThx79se2z3tLswSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwfTwt%2FbtrX9FQ0RvP%2FGzkpFgThx79se2z3tLswSk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;845&quot; height=&quot;214&quot; data-origin-width=&quot;845&quot; data-origin-height=&quot;214&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ Master kill&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1675582332595&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@master ~]# ps -ef | grep mysql
mysql     7025  5876  0 10:12 pts/0    00:00:36 mysqld --user=mysql
root     13864  5876  0 12:46 pts/0    00:00:00 grep --color=auto mysql

[root@master ~]# kill -9 7025&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;■ Slave(192.168.100.36)이 Master노드로 승격됨&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1148&quot; data-origin-height=&quot;443&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbnvG2/btrX7YJ51Ck/qngYcZYxUrazbWokTFsv2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbnvG2/btrX7YJ51Ck/qngYcZYxUrazbWokTFsv2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbnvG2/btrX7YJ51Ck/qngYcZYxUrazbWokTFsv2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbnvG2%2FbtrX7YJ51Ck%2FqngYcZYxUrazbWokTFsv2k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1148&quot; height=&quot;443&quot; data-origin-width=&quot;1148&quot; data-origin-height=&quot;443&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■&amp;nbsp;orchestrator log&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1675582432390&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Detected DeadMaster on 192.168.100.35:3306. Affected replicas: 1
Will recover from DeadMaster on 192.168.100.35:3306
Recovered from DeadMaster on 192.168.100.35:3306. Failed: 192.168.100.35:3306; Promoted: 192.168.100.36:3306
(for all types) Recovered from DeadMaster on 192.168.100.35:3306. Failed: 192.168.100.35:3306; Successor: 192.168.100.36:3306&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;참고&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://hoing.io/archives/91&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://hoing.io/archives/91&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1675581737633&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;MySQL Orchestrator - HA(High Availability) - 2 - 리팩토링 Failover Automated Recovery&quot; data-og-description=&quot; &quot; data-og-host=&quot;hoing.io&quot; data-og-source-url=&quot;https://hoing.io/archives/91&quot; data-og-url=&quot;https://hoing.io/archives/91&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/fAvKE/hyRwAU5fcZ/wwWSzGYqKEcvMUBIhvmy4K/img.png?width=451&amp;amp;height=358&amp;amp;face=0_0_451_358,https://scrap.kakaocdn.net/dn/jACK0/hyRwAnfqz9/9kEnQ2trWE961tklHEbG00/img.png?width=451&amp;amp;height=358&amp;amp;face=0_0_451_358,https://scrap.kakaocdn.net/dn/bqcnlJ/hyRvnQBErj/6JFLhOSrggEkMHJcFhPf70/img.png?width=990&amp;amp;height=370&amp;amp;face=0_0_990_370&quot;&gt;&lt;a href=&quot;https://hoing.io/archives/91&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://hoing.io/archives/91&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/fAvKE/hyRwAU5fcZ/wwWSzGYqKEcvMUBIhvmy4K/img.png?width=451&amp;amp;height=358&amp;amp;face=0_0_451_358,https://scrap.kakaocdn.net/dn/jACK0/hyRwAnfqz9/9kEnQ2trWE961tklHEbG00/img.png?width=451&amp;amp;height=358&amp;amp;face=0_0_451_358,https://scrap.kakaocdn.net/dn/bqcnlJ/hyRvnQBErj/6JFLhOSrggEkMHJcFhPf70/img.png?width=990&amp;amp;height=370&amp;amp;face=0_0_990_370');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;MySQL Orchestrator - HA(High Availability) - 2 - 리팩토링 Failover Automated Recovery&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hoing.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>DataBase/MySQL &amp;amp; MariaDB</category>
      <category>FAILOVER</category>
      <category>MariaDB</category>
      <category>mysql</category>
      <category>orchestrator</category>
      <category>takeover</category>
      <author>jeonghyun</author>
      <guid isPermaLink="true">https://jhdatabase.tistory.com/135</guid>
      <comments>https://jhdatabase.tistory.com/entry/MySQL-Orchestrator-Takeover-Failover-%ED%85%8C%EC%8A%A4%ED%8A%B8-part-2#entry135comment</comments>
      <pubDate>Sun, 5 Feb 2023 16:34:52 +0900</pubDate>
    </item>
    <item>
      <title>[MySQL - Orchestrator 구축] part 1</title>
      <link>https://jhdatabase.tistory.com/entry/MySQL-Orchestrator-%EA%B5%AC%EC%B6%95-part-1</link>
      <description>&lt;div&gt;&lt;b&gt;&lt;span&gt;Orchestrator란?&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;b&gt;&lt;u&gt;MySQL용 복제 토폴로지 관리자로써 고가용성 및 복제 관리 툴&lt;/u&gt;&lt;/b&gt;입니다.&lt;/span&gt; 체인을 위아래로 훑으면서 마스터와 슬레이브를 찾아 MySQL 환경의 복제 토폴로지를 검색하는 기능을 제공합니다. 또한 GUI를 통해 복제 토폴로지를 리팩터링하는 데도 사용할 수 있는데, 드래그 앤 드롭 인터페이스를 사용해서 슬레이브를 마스터로 승격할 수 있습니다.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;상태 개념을 사용해서 올바른 &lt;u&gt;&lt;b&gt;&lt;span&gt;복구 방법을 지능적으로 선택하고 사용할 적당한 마스터 승격 프로세스를 결정하므로 노드에 장애가 발생할 경우 복구를 지원&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;합니다.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;Orchestrator&amp;nbsp;기능&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;u&gt;&lt;b&gt;복제 트리의 토폴로지 및 상태를 자동으로 감지하고 모니터&lt;/b&gt;&lt;/u&gt;링합니다.&lt;/div&gt;
&lt;div&gt;&lt;u&gt;&lt;b&gt;GUI, CLI 또는 API를 사용하여 상태를 확인하고 작업을 수행&lt;/b&gt;&lt;/u&gt;할 수 있습니다.&lt;/div&gt;
&lt;div&gt;마스터의 자동 장애 조치를 지원하고 트리의 서버가 실패할 경우 수동 또는 자동으로 복제 트리를 수정할 수 있습니다.&lt;/div&gt;
&lt;div&gt;MySQL의 특정 버전이나 특징(MySQL, Percona Server, MariaDB 또는 MaxScale binlog 서버)에 의존하지 않습니다.&lt;/div&gt;
&lt;div&gt;Orchestrator는 단일 마스터 -&amp;gt; 슬레이브에서 수백 대의 서버로 구성된 복잡한 다중 계층 복제 트리에 이르기까지 다양한 유형의 토폴로지를 지원합니다.&lt;/div&gt;
&lt;div&gt;Orchestrator는 토폴로지를 변경할 수 있으며 해당 시점의 상태에 따라 변경합니다. 데이터베이스 토폴로지에 해당하는 것으로 구성을 정의할 필요가 없습니다.&lt;/div&gt;
&lt;div&gt;GUI는 상태를 보고할 뿐만 아니라 웹 인터페이스에서 드래그 앤 드롭을 수행하여 복제를 변경할 수 있는 더 멋진 기능 중 하나입니다(물론 CLI 및 API를 통해 이 외에도 훨씬 더 많은 작업을 수행할 수 있음).&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;데이터베이스 서버 설치 요구 사항&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;Orchestrator 는 데이터베이스 서버에 연결하기 위해 제한된 권한( SUPER , PROCESS , REPLICATION SLAVE , RELOAD )을 가진 MySQL 사용자만 필요 합니다. 이러한 권한으로 노드의 복제 상태를 확인하고 필요한 경우 복제 변경을 수행할 수 있습니다.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;u&gt;&lt;b&gt;&lt;span&gt;binlog 파일 위치, MySQL&amp;amp;MariaDB GTID, Pseudo GTID 및 Binlog 서버와 같은 다양한 복제 방법을 지원&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;합니다.&lt;/div&gt;
&lt;div&gt;데이터베이스 서버에 추가 소프트웨어를 설치할 필요가 없습니다.&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;테스트 환경&lt;/b&gt;&lt;/blockquote&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;Hostname&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;IP&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;OS Version&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;DB Version&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;master&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;192.168.100.35&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;CentOS 7.3&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;MySQL 8.0.28&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;slave&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;192.168.100.36&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;CentOS 7.3&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;MySQL 8.0.28&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;orchestrator&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;192.168.100.37&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;CentOS 7.3&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;MySQL 8.0.28&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;사용 포트 : 3306(DB통신) (Orchestrator),&amp;nbsp; 3000(Orchestrator 웹 기본 포트)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ MySQL 서버 설치 (master, slave) 및 replication&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;-Orchestrator 구성 에서 GTID 사용을 권장 되나 Binlog Position 사용하여 replication 구성&lt;/span&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1675580694646&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;## my.cnf
[mysqld]
datadir=/data
socket=/tmp/mysql.sock

server_id=1
expire_logs_days=7
log_bin=mysql.bin
relay_log=mysql-relay-bin
log_slave_updates=1
relay_log_purge=1

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd

log-error=/log/mariadb.log
pid-file=/log/mariadb.pid
[mysqld_safe]
log-error=/log/mariadb.log
pid-file=/log/mariadb.pid

#
# include all files from the config directory
#
!includedir /etc/my.cnf.d




mysql&amp;gt; select @@version;
+-----------+
| @@version |
+-----------+
| 8.0.28    |
+-----------+



mysql&amp;gt; show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for source to send event
                  Master_Host: 192.168.100.35
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 10
              Master_Log_File: mysql.000002
          Read_Master_Log_Pos: 1949
               Relay_Log_File: mysql-relay-bin.000002
                Relay_Log_Pos: 322
        Relay_Master_Log_File: mysql.000002
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 1949
              Relay_Log_Space: 532
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 1
                  Master_UUID: 532b1949-9d3e-11ed-ba82-f220cde25fa4
             Master_Info_File: mysql.slave_master_info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Replica has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind:
      Last_IO_Error_Timestamp:
     Last_SQL_Error_Timestamp:
               Master_SSL_Crl:
           Master_SSL_Crlpath:
           Retrieved_Gtid_Set:
            Executed_Gtid_Set:
                Auto_Position: 0
         Replicate_Rewrite_DB:
                 Channel_Name:
           Master_TLS_Version:
       Master_public_key_path:
        Get_master_public_key: 0
            Network_Namespace:
1 row in set, 1 warning (0.00 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;※ 사전에&amp;nbsp;&lt;/span&gt;&lt;span&gt;Orchestrator서버에도 데이터 저장을 위해 DB가 설치되어 있어야합니다.&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1675580727375&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; select @@version;
+-----------+
| @@version |
+-----------+
| 8.0.28    |
+-----------+
1 row in set (0.00 sec&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ Orchestrator 설치(RPM 설치)&amp;nbsp;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Orchestrator&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1675580747312&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@orchestrator ~]# yum -y install epel-release


## 필요 패키지 설치
[root@orchestrator ~]# yum -y install ncurses ncurses-devel ncurses-libs ncurses-static openssl openssl-devel bison readline gcc gcc-c++ make cmake glibc automake numactl numactl-devel libaio libaio-devel curl jq oniguruma&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;※&amp;nbsp;&lt;span&gt;Orchestrator DB 유저 생성&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;MySQL 에 접속하기 위한 유저 와 Repository 에 사용하는 계정을 생성&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ MySQL 유저 생성&amp;nbsp;&lt;/span&gt;&lt;span&gt;(Master)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;DB -&amp;gt; Orchestrator에 접속하여 컨트롤 및 모니터링 용도를 위한 유저를 생성&lt;/div&gt;
&lt;pre id=&quot;code_1675580769321&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; CREATE USER 'orchestrator'@'%' IDENTIFIED BY 'orchestrator';
Query OK, 0 rows affected (0.01 sec)

mysql&amp;gt; GRANT SUPER, PROCESS, REPLICATION SLAVE, RELOAD ON *.* TO 'orchestrator'@'%';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql&amp;gt; GRANT SELECT ON mysql.slave_master_info TO 'orchestrator'@'%';
Query OK, 0 rows affected (0.00 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■&amp;nbsp;Repository 접속을 위한 Topology 계정 생성 (&lt;/span&gt;&lt;span&gt;Orchestrator&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;Orchestrator 에서 토폴로지 정보 등을 저장하고 조회하는데 사용하는 Repository 용 DB가 필요하기 때문에 MySQL에 논리 database와 유저 생성&lt;/div&gt;
&lt;pre id=&quot;code_1675581036381&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; CREATE DATABASE IF NOT EXISTS orchestrator;

mysql&amp;gt; CREATE USER 'orchestrator'@'127.0.0.1' IDENTIFIED BY 'orchestrator';
Query OK, 0 rows affected (0.01 sec)

mysql&amp;gt; GRANT ALL PRIVILEGES ON `orchestrator`.* TO 'orchestrator'127.0.0.1';
Query OK, 0 rows affected (0.00 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ Orchestrator 패키지 설치 (&lt;/span&gt;&lt;span&gt;Orchestrator)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;Download URL :&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://github.com/openark/orchestrator/releases&quot;&gt;https://github.com/openark/orchestrator/releases&lt;/a&gt;
&lt;figure id=&quot;og_1675581050103&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;Releases &amp;middot; openark/orchestrator&quot; data-og-description=&quot;MySQL replication topology management and HA. Contribute to openark/orchestrator development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/openark/orchestrator/releases&quot; data-og-url=&quot;https://github.com/openark/orchestrator/releases&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bTbnmR/hyRviocvZ9/zKwq5EW7DChbjEVAYknwu1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/openark/orchestrator/releases&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/openark/orchestrator/releases&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bTbnmR/hyRviocvZ9/zKwq5EW7DChbjEVAYknwu1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Releases &amp;middot; openark/orchestrator&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;MySQL replication topology management and HA. Contribute to openark/orchestrator development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;pre id=&quot;code_1675581053896&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@orchestrator ~]# rpm -ivh https://github.com/openark/orchestrator/releases/download/v3.2.6/orchestrator-3.2.6-1.x86_64.rpm
Retrieving https://github.com/openark/orchestrator/releases/download/v3.2.6/orchestrator-3.2.6-1.x86_64.rpm
Preparing...                          ################################# [100%]
Updating / installing...
   1:orchestrator-1:3.2.6-1           ################################# [100%]&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ o&lt;/span&gt;&lt;span&gt;rchestrator.conf.json 컨피그 수정&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Orchestrator)&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1675581074629&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@orchestrator ~]# cd /usr/local/orchestrator/

[root@orchestrator orchestrator]# cp orchestrator-sample.conf.json orchestrator.conf.json

[root@orchestrator orchestrator]# vi orchestrator.conf.json
[root@orchestrator orchestrator]# cat orchestrator.conf.json
...
  &quot;MySQLTopologyUser&quot;: &quot;orchestrator&quot;,
  &quot;MySQLTopologyPassword&quot;: &quot;orchestrator&quot;,
...
  &quot;MySQLOrchestratorHost&quot;: &quot;127.0.0.1&quot;,
  &quot;MySQLOrchestratorPort&quot;: 3306,
  &quot;MySQLOrchestratorDatabase&quot;: &quot;orchestrator&quot;,
  &quot;MySQLOrchestratorUser&quot;: &quot;orchestrator&quot;,
  &quot;MySQLOrchestratorPassword&quot;: &quot;orchestrator&quot;,
...
==&amp;gt;오케스트레이터가 자동 복구할 수 있도록 하기 위해 위와 같이 Pseudo-GTID를 설정해야 합니다.
  &quot;AutoPseudoGTID&quot;: true,
  &quot;PseudoGTIDPattern&quot;: &quot;&quot;,
...
==&amp;gt; 호스트를 식별하기 위해 모든 DB 서버에서 다음 구성과 일치하도록 보고서 호스트를 설정합니다.
&quot;HostnameResolveMethod&quot;: &quot;none&quot;,
&quot;MySQLHostnameResolveMethod&quot;: &quot;&quot;,



## 로그 디렉토리 =&amp;gt; 기본 경로 /tmp&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ Hosts 등록&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Orchestrator)&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;Orchestrator 에서는 기본적으로 조회되는 호스트로 Orchestrator 서버에서 -&amp;gt; MySQL DB 로 접속을 하는 방식을 사용합니다.&lt;/div&gt;
&lt;div&gt;그래서 Orchestrator 서버에서는 DNS 로 IP가 조회되는 환경이거나 /etc/hosts 에 각 서버의 호스트명과 IP를 입력해줘야 정상적으로 사용할 수 있습니다.&lt;/div&gt;
&lt;pre id=&quot;code_1675581105313&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@orchestrator ~]# vi /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.100.35 master
192.168.100.36 slave
192.168.100.37 orchestrator&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■&lt;/span&gt; &lt;span&gt;Orchestrator&amp;nbsp;&lt;/span&gt;&lt;span&gt;Start (&lt;/span&gt;&lt;span&gt;Orchestrator)&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1675581145069&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@orchestrator ~]# systemctl start orchestrator.service


[root@orchestrator ~]# systemctl status orchestrator.service
● orchestrator.service - orchestrator: MySQL replication management and visualization
   Loaded: loaded (/etc/systemd/system/orchestrator.service; disabled; vendor preset: disabled)
   Active: active (running) since Fri 2023-01-27 15:38:46 KST; 1s ago
     Docs: https://github.com/openark/orchestrator
Main PID: 78625 (orchestrator)
   CGroup: /system.slice/orchestrator.service
           └─78625 /usr/local/orchestrator/orchestrator http

Jan 27 15:38:46 orchestrator orchestrator[78625]: 2023-01-27 15:38:46 DEBUG Orchestrator pool SetMaxOpenConns: 128
Jan 27 15:38:46 orchestrator orchestrator[78625]: 2023-01-27 15:38:46 DEBUG Initializing orchestrator
Jan 27 15:38:46 orchestrator orchestrator[78625]: 2023-01-27 15:38:46 INFO Connecting to backend 127.0.0.1:3306: maxConnections: 128, maxIdleConns: 32
Jan 27 15:38:46 orchestrator orchestrator[78625]: 2023-01-27 15:38:46 INFO Starting Discovery
Jan 27 15:38:46 orchestrator orchestrator[78625]: 2023-01-27 15:38:46 INFO Registering endpoints
Jan 27 15:38:46 orchestrator orchestrator[78625]: 2023-01-27 15:38:46 INFO continuous discovery: setting up
Jan 27 15:38:46 orchestrator orchestrator[78625]: 2023-01-27 15:38:46 INFO continuous discovery: starting
Jan 27 15:38:46 orchestrator orchestrator[78625]: 2023-01-27 15:38:46 DEBUG Queue.startMonitoring(DEFAULT)
Jan 27 15:38:46 orchestrator orchestrator[78625]: 2023-01-27 15:38:46 INFO Starting HTTP listener on :3000
Jan 27 15:38:47 orchestrator orchestrator[78625]: 2023-01-27 15:38:47 INFO Not elected as active node; active node: orchestrator; polling&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;■&amp;nbsp;&lt;span&gt;Orchestrator 웹 접속&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;웹 브라우저에서 &lt;a href=&quot;http://ip:3000/&quot;&gt;http://ip:3000&lt;/a&gt; 으로 접속을 합니다.&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;765&quot; data-origin-height=&quot;240&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mcRl8/btrX2qatzhm/qiz5rxSJxUIOswZQcSkl61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mcRl8/btrX2qatzhm/qiz5rxSJxUIOswZQcSkl61/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mcRl8/btrX2qatzhm/qiz5rxSJxUIOswZQcSkl61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmcRl8%2FbtrX2qatzhm%2Fqiz5rxSJxUIOswZQcSkl61%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;765&quot; height=&quot;240&quot; data-origin-width=&quot;765&quot; data-origin-height=&quot;240&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ Master 노드 등록&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;Clusters -&amp;gt; Discover -&amp;gt; Master IP등록&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;787&quot; data-origin-height=&quot;284&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1oRne/btrX3qAWnGs/t8jD44twVm2fSxJfzbD7NK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1oRne/btrX3qAWnGs/t8jD44twVm2fSxJfzbD7NK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1oRne/btrX3qAWnGs/t8jD44twVm2fSxJfzbD7NK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1oRne%2FbtrX3qAWnGs%2Ft8jD44twVm2fSxJfzbD7NK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;787&quot; height=&quot;284&quot; data-origin-width=&quot;787&quot; data-origin-height=&quot;284&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ Dashborad 확인&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;Clusters -&amp;gt; Dashboard&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;Dashboard 에는 Discovery 된 정보가 표기되며, Master MySQL Node 의 hostname 과 Instance 에 Master 와 Slave 노드를 포함한 수가 기재되어 있습니다.&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;224&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HsNnX/btrX4l65lWt/RBhi5iqUKKclDtQemSVq51/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HsNnX/btrX4l65lWt/RBhi5iqUKKclDtQemSVq51/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HsNnX/btrX4l65lWt/RBhi5iqUKKclDtQemSVq51/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHsNnX%2FbtrX4l65lWt%2FRBhi5iqUKKclDtQemSVq51%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;756&quot; height=&quot;224&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;224&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ 구조 확인&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;Hostname(Master) 클릭시 아래와같이 DB구조에 대해서 나옵니다.&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;793&quot; data-origin-height=&quot;333&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c22HJg/btrX2op4UK7/pH6qWvPa1c7KDynbN87FGK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c22HJg/btrX2op4UK7/pH6qWvPa1c7KDynbN87FGK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c22HJg/btrX2op4UK7/pH6qWvPa1c7KDynbN87FGK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc22HJg%2FbtrX2op4UK7%2FpH6qWvPa1c7KDynbN87FGK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;793&quot; height=&quot;333&quot; data-origin-width=&quot;793&quot; data-origin-height=&quot;333&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ 상세정보 확인&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;해당 노드의 톱니바퀴 모양 클릭시 노드에 대한 상세 정보 확인 가능합니다.&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #3665ee;&quot;&gt;&amp;lt;Master&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1395&quot; data-origin-height=&quot;824&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sBfBm/btrX3tLqPDK/t6XXKTwrV5s8el1AyTasxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sBfBm/btrX3tLqPDK/t6XXKTwrV5s8el1AyTasxk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sBfBm/btrX3tLqPDK/t6XXKTwrV5s8el1AyTasxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsBfBm%2FbtrX3tLqPDK%2Ft6XXKTwrV5s8el1AyTasxk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1395&quot; height=&quot;824&quot; data-origin-width=&quot;1395&quot; data-origin-height=&quot;824&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span style=&quot;color: #3665ee;&quot;&gt;&amp;lt;Slave&amp;gt;&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1379&quot; data-origin-height=&quot;913&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cefB5B/btrX3rs8Har/UhKQN5Ab344NhINnEK7u3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cefB5B/btrX3rs8Har/UhKQN5Ab344NhINnEK7u3k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cefB5B/btrX3rs8Har/UhKQN5Ab344NhINnEK7u3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcefB5B%2FbtrX3rs8Har%2FUhKQN5Ab344NhINnEK7u3k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1379&quot; height=&quot;913&quot; data-origin-width=&quot;1379&quot; data-origin-height=&quot;913&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;참고&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;a href=&quot;https://www.percona.com/blog/2016/03/08/orchestrator-mysql-replication-topology-manager/&quot;&gt;https://www.percona.com/blog/2016/03/08/orchestrator-mysql-replication-topology-manager/&lt;/a&gt;
&lt;figure id=&quot;og_1675581307288&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Orchestrator: MySQL Replication Topology Manager - Percona Database Performance Blog&quot; data-og-description=&quot;This blog post discusses Orchestrator: MySQL Replication Topology Manager. It&amp;nbsp;will give a general overview of the features of&amp;nbsp;Orchestrator, a replication topology manager for MySQL&quot; data-og-host=&quot;www.percona.com&quot; data-og-source-url=&quot;https://www.percona.com/blog/2016/03/08/orchestrator-mysql-replication-topology-manager/&quot; data-og-url=&quot;https://www.percona.com/blog/2016/03/08/orchestrator-mysql-replication-topology-manager/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/BA1tC/hyRwwkQ6jE/bh7Wb3aDkROjkgzVOlOXtk/img.gif?width=1123&amp;amp;height=467&amp;amp;face=0_0_1123_467&quot;&gt;&lt;a href=&quot;https://www.percona.com/blog/2016/03/08/orchestrator-mysql-replication-topology-manager/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.percona.com/blog/2016/03/08/orchestrator-mysql-replication-topology-manager/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/BA1tC/hyRwwkQ6jE/bh7Wb3aDkROjkgzVOlOXtk/img.gif?width=1123&amp;amp;height=467&amp;amp;face=0_0_1123_467');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Orchestrator: MySQL Replication Topology Manager - Percona Database Performance Blog&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;This blog post discusses Orchestrator: MySQL Replication Topology Manager. It&amp;nbsp;will give a general overview of the features of&amp;nbsp;Orchestrator, a replication topology manager for MySQL&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.percona.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://mariadb.com/kb/en/orchestrator-overview/&quot;&gt;https://mariadb.com/kb/en/orchestrator-overview/&lt;/a&gt;
&lt;figure id=&quot;og_1675581304850&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Orchestrator Overview&quot; data-og-description=&quot;Using Orchestrator to automate failover and replication operations.&quot; data-og-host=&quot;mariadb.com&quot; data-og-source-url=&quot;https://mariadb.com/kb/en/orchestrator-overview/&quot; data-og-url=&quot;https://mariadb.com/kb/en/orchestrator-overview/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://mariadb.com/kb/en/orchestrator-overview/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://mariadb.com/kb/en/orchestrator-overview/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Orchestrator Overview&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Using Orchestrator to automate failover and replication operations.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;mariadb.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://hoing.io/archives/72&quot;&gt;https://hoing.io/archives/72&lt;/a&gt;
&lt;figure id=&quot;og_1675581306187&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;MySQL Orchestrator - HA(High Availability) - 1 - 기능 설명 및 설치&quot; data-og-description=&quot; &quot; data-og-host=&quot;hoing.io&quot; data-og-source-url=&quot;https://hoing.io/archives/72&quot; data-og-url=&quot;https://hoing.io/archives/72&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dOI2ef/hyRwum2rAF/BczIsq1UyKIk192eYrmKQ0/img.png?width=451&amp;amp;height=358&amp;amp;face=0_0_451_358,https://scrap.kakaocdn.net/dn/chcY6X/hyRwyiFyWl/qFsvdD88yKXY8kfkvRXRm0/img.png?width=451&amp;amp;height=358&amp;amp;face=0_0_451_358,https://scrap.kakaocdn.net/dn/dsDCNt/hyRvnJPWsJ/I2A7JhCIrKWnmo5hIFQHb1/img.png?width=1134&amp;amp;height=794&amp;amp;face=0_0_1134_794&quot;&gt;&lt;a href=&quot;https://hoing.io/archives/72&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://hoing.io/archives/72&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dOI2ef/hyRwum2rAF/BczIsq1UyKIk192eYrmKQ0/img.png?width=451&amp;amp;height=358&amp;amp;face=0_0_451_358,https://scrap.kakaocdn.net/dn/chcY6X/hyRwyiFyWl/qFsvdD88yKXY8kfkvRXRm0/img.png?width=451&amp;amp;height=358&amp;amp;face=0_0_451_358,https://scrap.kakaocdn.net/dn/dsDCNt/hyRvnJPWsJ/I2A7JhCIrKWnmo5hIFQHb1/img.png?width=1134&amp;amp;height=794&amp;amp;face=0_0_1134_794');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;MySQL Orchestrator - HA(High Availability) - 1 - 기능 설명 및 설치&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hoing.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;/div&gt;</description>
      <category>DataBase/MySQL &amp;amp; MariaDB</category>
      <category>MariaDB</category>
      <category>mysql</category>
      <category>orchestrator</category>
      <author>jeonghyun</author>
      <guid isPermaLink="true">https://jhdatabase.tistory.com/134</guid>
      <comments>https://jhdatabase.tistory.com/entry/MySQL-Orchestrator-%EA%B5%AC%EC%B6%95-part-1#entry134comment</comments>
      <pubDate>Sun, 5 Feb 2023 16:18:31 +0900</pubDate>
    </item>
    <item>
      <title>[MySQL - Read/Write Split 부하분산 구성] use. ProxySQL</title>
      <link>https://jhdatabase.tistory.com/entry/MySQL-ReadWrite-Split-%EB%B6%80%ED%95%98%EB%B6%84%EC%82%B0-%EA%B5%AC%EC%84%B1-use-ProxySQL</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;MySQL 3node 운영중 Master노드의 리소스 과부화 현상을 해소하고자 Read/Write Split을 하게되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Proxy서버로 ProxySQL을 사용하여 최종적으로 Write트랜잭션은 Master노드로만, Read 트랜잭션은 모든 노드로 가도록 설정하습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;테스트 환경&lt;/b&gt;&lt;/blockquote&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;Hostname&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;IP&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;VIP&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;DB Version&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;proxy&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;192.168.100.84&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;proxysql-2.4.4&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;master&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;192.168.100.80&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;192.168.100.88&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;MySQL 8.0&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;slave1&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;192.168.100.81&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;MySQL 8.0&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;slave2&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;192.168.100.83&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;MySQL 8.0&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;사전 구성&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MySQL서버 3nodes MHA구성&lt;/p&gt;
&lt;pre id=&quot;code_1674785574644&quot; class=&quot;markdown&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;MariaDB [(none)]&amp;gt; show slave hosts\G;
*************************** 1. row ***************************
Server_id: 3
     Host:
     Port: 3306
Master_id: 1
*************************** 2. row ***************************
Server_id: 2
     Host:
     Port: 3306
Master_id: 1
2 rows in set (0.000 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ Proxy SQL install&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1674785604395&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@proxy1 ~]# yum -y install epel-release

[root@proxy1 ~]# wget https://github.com/sysown/proxysql/releases/download/v2.4.4/proxysql-2.4.4-1-centos7.x86_64.rpm

[root@proxy1 ~]# yum -y install proxysql-2.4.4-1-centos7.x86_64.rpm

[root@proxy1 ~]# systemctl start proxysql


[root@proxy1 ~]# mysql -uadmin -padmin -h 127.0.0.1 -P6032

mysql&amp;gt; show databases;
+-----+---------------+-------------------------------------+
| seq | name          | file                                |
+-----+---------------+-------------------------------------+
| 0   | main          |                                     |
| 2   | disk          | /var/lib/proxysql/proxysql.db       |
| 3   | stats         |                                     |
| 4   | monitor       |                                     |
| 5   | stats_history | /var/lib/proxysql/proxysql_stats.db |
+-----+---------------+-------------------------------------+
5 rows in set (0.00 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ ProxySQL 구성 (proxy 서버에서 진행)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;div&gt;&lt;span&gt;MySQL 서버 등록 ( mysql_servers )&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;span&gt;Query 실행할 유저 등록 ( mysql_users )&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;span&gt;Rules 등록 ( mysql_query_rules )&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;pre id=&quot;code_1674785644708&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@proxy1 ~]# mysql -uadmin -padmin -h 127.0.0.1 -P6032

insert into mysql_servers (hostgroup_id, hostname, port) values (1,'192.168.100.88',3306);
INSERT INTO mysql_users (username, password, active, default_hostgroup) VALUES ('kim', 'kim', 1, 1);
INSERT INTO mysql_query_rules (active, match_pattern, destination_hostgroup, apply) VALUES (1, '.*@.*', 1, 1);

LOAD MYSQL USERS TO RUNTIME;
SAVE MYSQL USERS TO DISK;
LOAD MYSQL QUERY RULES TO RUNTIME;
SAVE MYSQL QUERY RULES TO DISK;
LOAD MYSQL SERVERS TO RUNTIME;
SAVE MYSQL SERVERS TO DISK;
LOAD SCHEDULER TO RUNTIME;
SAVE SCHEDULER TO DISK;
LOAD MYSQL VARIABLES TO RUNTIME;
SAVE MYSQL VARIABLES TO DISK;





## 클라이언트에서 접속을 위한 계정 추가  (클라이언트에서 ProxySQL로 원격 접속할 수 있는 계정)
MYSQL 서버에 kim 유저 생성

MariaDB [(none)]&amp;gt; create user 'kim'@'%' identified by 'kim';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]&amp;gt; grant all on *.* to 'kim'@'%';
Query OK, 0 rows affected (0.00 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ monitor 유저 생성&amp;nbsp;&lt;/span&gt; &lt;span style=&quot;color: #555555;&quot;&gt;(ProxySQL에서 MySQL로 원격 접속할 수 있는 계정)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;해당 monitor 유저로 MySQL Database의 상태를 모니터링할수 있다.&lt;/span&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1674785667988&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@proxy1 ~]# cat /etc/proxysql.cnf | grep monitor
# make sure to configure monitor username and password
# https://github.com/sysown/proxysql/wiki/Global-variables#mysql-monitor_username-mysql-monitor_password
    monitor_username=&quot;monitor&quot;
    monitor_password=&quot;monitor&quot;
    monitor_history=600000
    monitor_connect_interval=60000
    monitor_ping_interval=10000
    monitor_read_only_interval=1500
    monitor_read_only_timeout=500



### MYSQL 서버에 monitor 유저 생성
MariaDB [(none)]&amp;gt; create user 'monitor'@'192.168.100.%' identified by 'monitor';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]&amp;gt; grant all on *.* to 'monitor'@'192.168.100.%';
Query OK, 0 rows affected (0.00 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ Query 테스트 (proxy 서버)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;proxy를 통해 접속&lt;/span&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1674785690909&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;##Write
[root@proxy1 ~]# mysql -h 192.168.100.84 -P6033 -ukim -pkim -e &quot;insert into kim.kim values (1);&quot;


## Read
[root@proxy1 ~]# mysql -h 192.168.100.84 -P6033 -ukim -pkim -e &quot;select * from kim.kim;&quot;
mysql: [Warning] Using a password on the command line interface can be insecure.
+------+
| i    |
+------+
|    1 |
+------+&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ Read/Write Split 설정&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;VIP:&amp;nbsp;192.168.100.88&lt;/div&gt;
&lt;div&gt;Master :&amp;nbsp;192.168.100.80 / Slave1 :&amp;nbsp;192.168.100.81 /&amp;nbsp;Slave2 :&amp;nbsp;192.168.100.83&lt;/div&gt;
&lt;div&gt;Hostgroup1 : Master IP&lt;/div&gt;
&lt;div&gt;Hostgroup2 : Master IP , Slave1 IP, Slave 2 IP&lt;/div&gt;
&lt;pre id=&quot;code_1674785780807&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;### Server 설정
[root@proxy1 ~]# mysql -uadmin -padmin -h 127.0.0.1 -P6032

INSERT INTO mysql_servers (hostname,hostgroup_id,port,weight,max_replication_lag) VALUES ('192.168.100.80',1,3306,1000,0);
INSERT INTO mysql_servers (hostname,hostgroup_id,port,weight,max_replication_lag) VALUES ('192.168.100.80',2,3306,1000,10);
INSERT INTO mysql_servers (hostname,hostgroup_id,port,weight,max_replication_lag) VALUES ('192.168.100.81',2,3306,1000,10);
INSERT INTO mysql_servers (hostname,hostgroup_id,port,weight,max_replication_lag) VALUES ('192.168.100.83',2,3306,1000,10);

INSERT INTO mysql_replication_hostgroups(writer_hostgroup,reader_hostgroup) VALUES (1,2);
LOAD MYSQL SERVERS TO RUNTIME; 
SAVE MYSQL SERVERS TO DISK;



mysql&amp;gt; select * from mysql_servers;
+--------------+----------------+------+-----------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+
| hostgroup_id | hostname       | port | gtid_port | status | weight | compression | max_connections | max_replication_lag | use_ssl | max_latency_ms | comment |
+--------------+----------------+------+-----------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+
| 1            | 192.168.100.80 | 3306 | 0         | ONLINE | 1000   | 0           | 1000            | 0                   | 0       | 0              |         |
| 2            | 192.168.100.80 | 3306 | 0         | ONLINE | 1000   | 0           | 1000            | 10                  | 0       | 0              |         |
| 2            | 192.168.100.81 | 3306 | 0         | ONLINE | 1000   | 0           | 1000            | 10                  | 0       | 0              |         |
| 2            | 192.168.100.83 | 3306 | 0         | ONLINE | 1000   | 0           | 1000            | 10                  | 0       | 0              |         |
+--------------+----------------+------+-----------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+
4 rows in set (0.00 sec)




## 서버 연결 성공 확인
mysql&amp;gt; SELECT * FROM monitor.mysql_server_connect_log ORDER BY time_start_us DESC LIMIT 10;
+----------------+------+------------------+-------------------------+---------------+
| hostname       | port | time_start_us    | connect_success_time_us | connect_error |
+----------------+------+------------------+-------------------------+---------------+
| 192.168.100.81 | 3306 | 1668751461478938 | 1018                    | NULL          |
| 192.168.100.80 | 3306 | 1668751460876963 | 973                     | NULL          |
| 192.168.100.83 | 3306 | 1668751460275018 | 957                     | NULL          |
| 192.168.100.80 | 3306 | 1668751401382812 | 1107                    | NULL          |
| 192.168.100.81 | 3306 | 1668751400828708 | 1007                    | NULL          |
| 192.168.100.83 | 3306 | 1668751400274594 | 966                     | NULL          |
| 192.168.100.81 | 3306 | 1668751341335961 | 1023                    | NULL          |
| 192.168.100.83 | 3306 | 1668751340805075 | 1203                    | NULL          |
| 192.168.100.80 | 3306 | 1668751340274211 | 985                     | NULL          |
| 192.168.100.81 | 3306 | 1668751281387623 | 1147                    | NULL          |
+----------------+------+------------------+-------------------------+---------------+
10 rows in set (0.00 sec)




## 클라이언트에서 접속을 위한 계정 추가  (클라이언트에서 ProxySQL로 원격 접속할 수 있는 계정)
MYSQL DB쪽에도 생성되어있어야한다.
INSERT INTO mysql_users (username, password, active, default_hostgroup) VALUES ('kim', 'kim', 1, 1);
LOAD MYSQL USERS TO RUNTIME;
SAVE MYSQL USERS TO DISK;

+----------+----------+--------+---------+-------------------+----------------+---------------+------------------------+--------------+---------+----------+-----------------+------------+---------+
| username | password | active | use_ssl | default_hostgroup | default_schema | schema_locked | transaction_persistent | fast_forward | backend | frontend | max_connections | attributes | comment |
+----------+----------+--------+---------+-------------------+----------------+---------------+------------------------+--------------+---------+----------+-----------------+------------+---------+
| kim      | kim      | 1      | 0       | 1                 | NULL           | 0             | 1                      | 0            | 1       | 1        | 10000           |            |         |
+----------+----------+--------+---------+-------------------+----------------+---------------+------------------------+--------------+---------+----------+-----------------+------------+---------+
1 row in set (0.00 sec)




### Query Split을 위한 규칙 생성
insert into mysql_query_rules (username,destination_hostgroup,active,retries,match_digest) values('kim',1,1,3,'^SELECT.*FOR UPDATE');
insert into mysql_query_rules (username,destination_hostgroup,active,retries,match_digest) values('kim',2,1,3,'^SELECT');

LOAD MYSQL QUERY RULES TO RUNTIME;
SAVE MYSQL QUERY RULES TO DISK;


mysql&amp;gt; select * from mysql_query_rules;
+---------+--------+----------+------------+--------+-------------+------------+------------+--------+---------------------+---------------+----------------------+--------------+---------+-----------------+-----------------------+-----------+--------------------+---------------+-----------+---------+---------+-------+-------------------+----------------+------------------+-----------+--------+-------------+-----------+---------------------+-----+-------+------------+---------+
| rule_id | active | username | schemaname | flagIN | client_addr | proxy_addr | proxy_port | digest | match_digest        | match_pattern | negate_match_pattern | re_modifiers | flagOUT | replace_pattern | destination_hostgroup | cache_ttl | cache_empty_result | cache_timeout | reconnect | timeout | retries | delay | next_query_flagIN | mirror_flagOUT | mirror_hostgroup | error_msg | OK_msg | sticky_conn | multiplex | gtid_from_hostgroup | log | apply | attributes | comment |
+---------+--------+----------+------------+--------+-------------+------------+------------+--------+---------------------+---------------+----------------------+--------------+---------+-----------------+-----------------------+-----------+--------------------+---------------+-----------+---------+---------+-------+-------------------+----------------+------------------+-----------+--------+-------------+-----------+---------------------+-----+-------+------------+---------+
| 1       | 1      | NULL     | NULL       | 0      | NULL        | NULL       | NULL       | NULL   | NULL                | .*@.*         | 0                    | CASELESS     | NULL    | NULL            | 1                     | NULL      | NULL               | NULL          | NULL      | NULL    | NULL    | NULL  | NULL              | NULL           | NULL             | NULL      | NULL   | NULL        | NULL      | NULL                | NULL | 1     |            | NULL    |
| 2       | 1      | kim      | NULL       | 0      | NULL        | NULL       | NULL       | NULL   | ^SELECT.*FOR UPDATE | NULL          | 0                    | CASELESS     | NULL    | NULL            | 1                     | NULL      | NULL               | NULL          | NULL      | NULL    | 3       | NULL  | NULL              | NULL           | NULL             | NULL      | NULL   | NULL        | NULL      | NULL                | NULL | 0     |            | NULL    |
| 3       | 1      | kim      | NULL       | 0      | NULL        | NULL       | NULL       | NULL   | ^SELECT             | NULL          | 0                    | CASELESS     | NULL    | NULL            | 2                     | NULL      | NULL               | NULL          | NULL      | NULL    | 3       | NULL  | NULL              | NULL           | NULL             | NULL      | NULL   | NULL        | NULL      | NULL                | NULL | 0     |            | NULL    |
+---------+--------+----------+------------+--------+-------------+------------+------------+--------+---------------------+---------------+----------------------+--------------+---------+-----------------+-----------------------+-----------+--------------------+---------------+-----------+---------+---------+-------+-------------------+----------------+------------------+-----------+--------+-------------+-----------+---------------------+-----+-------+------------+---------+
3 rows in set (0.00 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ Mysql server 작업 (Master)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;db server로부터 데이터를 가져올 monitor 유저 생성&lt;/span&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1674785810457&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;MariaDB [kim]&amp;gt; create user 'monitor'@'%' identified by 'monitor';
Query OK, 0 rows affected (0.001 sec)

MariaDB [kim]&amp;gt; grant all on *.* to 'monitor'@'%';
Query OK, 0 rows affected (0.000 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ Write Test&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1674785828798&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;## proxy를 통해 3번 데이터 write
[root@proxy1 proxysql]# mysql -h192.168.100.84 -P6033 -ukim -pkim -e &quot;insert into kim.host values(@@hostname);&quot;
[root@proxy1 proxysql]# mysql -h192.168.100.84 -P6033 -ukim -pkim -e &quot;insert into kim.host values(@@hostname);&quot;
[root@proxy1 proxysql]# mysql -h192.168.100.84 -P6033 -ukim -pkim -e &quot;insert into kim.host values(@@hostname);&quot;



## Master서버로 데이터 들어오는것 확인
MariaDB [(none)]&amp;gt; select * from kim.host;
+--------+
| i      |
+--------+
| master |
| master |
| master |
+--------+
3 rows in set (0.000 sec)



[root@proxy1 proxysql]# while true; do sleep 1; mysql -h192.168.100.84 -P6033 -ukim -pkim -e &quot;insert into kim.host values(@@hostname)&quot;; done

MariaDB [(none)]&amp;gt; select * from kim.host;
+--------+
| i      |
+--------+
| master |
| master |
| master |
| master |
| master |
| master |
| master |
| master |
| master |
| master |
| master |
| master |
+--------+
12 rows in set (0.000 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ Read Test&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1674785842757&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;## 조회할때 hostname이 바뀌는 것을 확인

[root@proxy1 proxysql]# while true; do mysql -h192.168.100.84 -P6033 -ukim -pkim -e &quot;select @@hostname;&quot;; sleep 1; done
mysql: [Warning] Using a password on the command line interface can be insecure.
+------------+
| @@hostname |
+------------+
| master     |
+------------+
mysql: [Warning] Using a password on the command line interface can be insecure.
+------------+
| @@hostname |
+------------+
| slave1     |
+------------+
mysql: [Warning] Using a password on the command line interface can be insecure.
+------------+
| @@hostname |
+------------+
| slave2     |
+------------+
mysql: [Warning] Using a password on the command line interface can be insecure.
+------------+
| @@hostname |
+------------+
| slave2     |
+------------+
mysql: [Warning] Using a password on the command line interface can be insecure.
+------------+
| @@hostname |
+------------+
| slave1     |
+------------+&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;Failover Test&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ Master kill &amp;amp; Failover&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1674785907296&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@master ~]# ps -ef | grep mysql
root     11703 24230  0 13:41 pts/0    00:00:00 grep --color=auto mysql
mysql    18746     1  0 Nov17 ?        00:01:01 ./mysqld --user=mysql


[root@master ~]# kill -9 18746


Selected 192.168.100.81(192.168.100.81:3306) as a new master.
192.168.100.81(192.168.100.81:3306): OK: Applying all logs succeeded.
192.168.100.81(192.168.100.81:3306): OK: Activated master IP address.
192.168.100.83(192.168.100.83:3306): This host has the latest relay log events.
Generating relay diff files from the latest slave succeeded.
192.168.100.83(192.168.100.83:3306): OK: Applying all logs succeeded. Slave started, replicating from 192.168.100.81(192.168.100.81:3306)
192.168.100.81(192.168.100.81:3306): Resetting slave info succeeded.
Master failover to 192.168.100.81(192.168.100.81:3306) completed successfully.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ Read Test&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;기존 master를 제외한 나머지 노드로만 read 세션 분산&lt;/span&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1674785942908&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql -h192.168.100.84 -P6033 -ukim -pkim -e &quot;select @@hostname;&quot;;

mysql: [Warning] Using a password on the command line interface can be insecure.
+------------+
| @@hostname |
+------------+
| slave1     |
+------------+
mysql: [Warning] Using a password on the command line interface can be insecure.
+------------+
| @@hostname |
+------------+
| slave2     |
+------------+
mysql: [Warning] Using a password on the command line interface can be insecure.
+------------+
| @@hostname |
+------------+
| slave2     |
+------------+
mysql: [Warning] Using a password on the command line interface can be insecure.
+------------+
| @@hostname |
+------------+
| slave1     |
+------------+&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ Write Test&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1674785957852&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;MariaDB [(none)]&amp;gt; select * from kim.host;
+--------+
| i      |
+--------+
| slave1 |
| slave1 |
| slave1 |
| slave1 |
| slave1 |
| slave1 |
| slave1 |
+--------+
7 rows in set (0.00 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;테스트에서는 VIP로 Write Hostgroup에 추가했지만, &lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;ProxySQL에서 자체적으로 Failover를 감지하고 Hostgroup을 바꿔주기때문에&amp;nbsp;&lt;/span&gt;그냥 Master IP로 설정해도 무방합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;a href=&quot;https://proxysql.com/documentation/global-variables/mysql-variables/&quot;&gt;https://proxysql.com/documentation/global-variables/mysql-variables/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1674785212966&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;MySQL Variables - ProxySQL&quot; data-og-description=&quot;MySQL Variables List of MySQL Variables NOTE: You can click on the variable name to jump [&amp;hellip;]&quot; data-og-host=&quot;proxysql.com&quot; data-og-source-url=&quot;https://proxysql.com/documentation/global-variables/mysql-variables/&quot; data-og-url=&quot;https://proxysql.com/documentation/global-variables/mysql-variables/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/fLHY5/hyRpEw3dPo/QVLJfykBYWgm7h9wexX2D1/img.png?width=96&amp;amp;height=96&amp;amp;face=20_32_67_79,https://scrap.kakaocdn.net/dn/di10Tl/hyRpEcJZmJ/4oSwPa5tPpV6GhZ7hXyp11/img.png?width=800&amp;amp;height=278&amp;amp;face=332_91_444_203&quot;&gt;&lt;a href=&quot;https://proxysql.com/documentation/global-variables/mysql-variables/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://proxysql.com/documentation/global-variables/mysql-variables/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/fLHY5/hyRpEw3dPo/QVLJfykBYWgm7h9wexX2D1/img.png?width=96&amp;amp;height=96&amp;amp;face=20_32_67_79,https://scrap.kakaocdn.net/dn/di10Tl/hyRpEcJZmJ/4oSwPa5tPpV6GhZ7hXyp11/img.png?width=800&amp;amp;height=278&amp;amp;face=332_91_444_203');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;MySQL Variables - ProxySQL&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;MySQL Variables List of MySQL Variables NOTE: You can click on the variable name to jump [&amp;hellip;]&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;proxysql.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>DataBase/MySQL &amp;amp; MariaDB</category>
      <category>mha</category>
      <category>mysql</category>
      <category>proxysql</category>
      <category>부하분산</category>
      <author>jeonghyun</author>
      <guid isPermaLink="true">https://jhdatabase.tistory.com/133</guid>
      <comments>https://jhdatabase.tistory.com/entry/MySQL-ReadWrite-Split-%EB%B6%80%ED%95%98%EB%B6%84%EC%82%B0-%EA%B5%AC%EC%84%B1-use-ProxySQL#entry133comment</comments>
      <pubDate>Fri, 27 Jan 2023 11:29:31 +0900</pubDate>
    </item>
    <item>
      <title>[MySQL - 간단한 백업 성공 이메일 스크립트 설정]</title>
      <link>https://jhdatabase.tistory.com/entry/MySQL-%EA%B0%84%EB%8B%A8%ED%95%9C-%EB%B0%B1%EC%97%85-%EC%84%B1%EA%B3%B5-%EC%9D%B4%EB%A9%94%EC%9D%BC-%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EC%84%A4%EC%A0%95</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;안녕하세요&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DB백업 데일리 성공 여부를 받아볼 수 있는 &lt;span&gt;간단한&lt;span&gt; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;이메일 스크립트 설정을 해보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 스크립트를 기반으로 데일리로 받아보고자 하는 정보를 조금씩 수정하여 사용하면 될거 같습니다~&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt; 사전 설정&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;send mail을 사용하여 구글 메일로 발송 할 계획이라 sendmail 설치가 되어있어야합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ &lt;span&gt;&lt;span&gt;sendmail 설치&lt;/span&gt;&lt;/span&gt; &lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1674783831998&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@mysql]# yum install -y sendmail sendmail-cf&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;■ &lt;span&gt;&lt;span&gt;config 수정&lt;/span&gt;&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1674783851951&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@mysql]# vi /etc/mail/sendmail.mc
-- 52,53라인에 dnl을 삭제


[root@mysql bin]# m4 /etc/mail/sendmail.mc &amp;gt; /etc/mail/sendmail.cf&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;■ &lt;span&gt;&lt;span&gt;25번 포트 open 확인&lt;/span&gt;&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1674783902119&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@mysql]# netstat -anp | grep sendmail | grep LISTEN
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      22675/sendmail: acc&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;■&lt;span&gt; &lt;span&gt;&lt;span&gt;start&lt;/span&gt;&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1674783916751&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@mysql]# systemctl start sendmail.service d&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;■ &lt;span&gt;&lt;span&gt;test 메일 전송&lt;/span&gt;&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1674783958523&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@mysql]# echo &quot;content message&quot; | mail -r jeonghyun.kim@***.com -s &quot;TITLE&quot; jeonghyun.kim@***.com

보내는 사람: sender@gmail.com
받는 사람: receiver@gmail.com
메일 제목: subject title
메일 본문: content message
# echo &quot;content message&quot; | mail -r sender@gmail.com -s &quot;subject title&quot; receiver@gmail.com&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;Email script&lt;/b&gt;&lt;/blockquote&gt;
&lt;pre id=&quot;code_1674784046311&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#!/bin/bash
export back_date=$(date +&quot;%Y%m%d&quot;)
DIR=/backup/backup_$back_date
dump=`du -sh $DIR/*`
dumplist=`ls -l /backup`
status=`ls -l $DIR`
TO=&quot;jeonghyun.kim@***.com&quot;

SUBJECT=&quot;MySQL Dump success&quot;
MESSAGE=&quot;/tmp/Mail.out&quot;
TO=&quot;jeonghyun.kim@***.com&quot;
echo -e &quot;+------------------------------------------------------------------+&quot; &amp;gt;&amp;gt; $MESSAGE
echo &quot;                                  Dump List&quot; &amp;gt;&amp;gt; $MESSAGE
echo -e &quot;+------------------------------------------------------------------+&quot; &amp;gt;&amp;gt; $MESSAGE
echo &quot;$dumplist&quot; &amp;gt;&amp;gt; $MESSAGE
echo -e &quot;\n\n+------------------------------------------------------------------+&quot; &amp;gt;&amp;gt; $MESSAGE
echo &quot;                                 Today Dump&quot; &amp;gt;&amp;gt; $MESSAGE
echo -e &quot;+------------------------------------------------------------------+&quot; &amp;gt;&amp;gt; $MESSAGE
echo &quot;$status&quot; &amp;gt;&amp;gt; $MESSAGE
echo -e &quot;\n\n+------------------------------------------------------------------+&quot; &amp;gt;&amp;gt; $MESSAGE
echo &quot;                                  Dump Size&quot; &amp;gt;&amp;gt; $MESSAGE
echo -e &quot;+------------------------------------------------------------------+&quot; &amp;gt;&amp;gt; $MESSAGE
echo &quot;$dump&quot; &amp;gt;&amp;gt; $MESSAGE
  mail -s &quot;$SUBJECT&quot; &quot;$TO&quot; &amp;lt; $MESSAGE
  rm /tmp/Mail.out&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ crontab&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1674784146980&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;## 백업 성공 시 email report 발송
0 3 * * * /bin/bash /backup/backup.sh &amp;amp;&amp;amp; /backup/alert.sh&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;■ Email report&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1521&quot; data-origin-height=&quot;757&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/v7oiV/btrXi4dcUkD/vK9KjAMeZkKtC0UZLdfzsK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/v7oiV/btrXi4dcUkD/vK9KjAMeZkKtC0UZLdfzsK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/v7oiV/btrXi4dcUkD/vK9KjAMeZkKtC0UZLdfzsK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fv7oiV%2FbtrXi4dcUkD%2FvK9KjAMeZkKtC0UZLdfzsK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1521&quot; height=&quot;757&quot; data-origin-width=&quot;1521&quot; data-origin-height=&quot;757&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>DataBase Admin/DB Admin</category>
      <category>Email</category>
      <category>mysql</category>
      <category>script</category>
      <category>sendmail</category>
      <author>jeonghyun</author>
      <guid isPermaLink="true">https://jhdatabase.tistory.com/132</guid>
      <comments>https://jhdatabase.tistory.com/entry/MySQL-%EA%B0%84%EB%8B%A8%ED%95%9C-%EB%B0%B1%EC%97%85-%EC%84%B1%EA%B3%B5-%EC%9D%B4%EB%A9%94%EC%9D%BC-%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EC%84%A4%EC%A0%95#entry132comment</comments>
      <pubDate>Fri, 27 Jan 2023 10:58:51 +0900</pubDate>
    </item>
    <item>
      <title>[Prometheus - 원하는 데이터 뽑기] part 3 use. mysql_exporter</title>
      <link>https://jhdatabase.tistory.com/entry/Prometheus-%EC%9B%90%ED%95%98%EB%8A%94-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%BD%91%EA%B8%B0-part-3-use-mysqlexporter</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;MySQL_exporter (모니터링 대상 서버에서 진행 mysql server)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;MySQL 서버에 SQL을 질의한 결과를 Prometheus에 쌓은 뒤 이를 Grafana에서 대시보드로 구성하기 위해 mysql_exporter를 구성 MySQL에 적재되어 있는 테이블 데이터에 SELECT SQL을 질의한 결과를 Prometheus에 적재할 수 있다면, Grafana의 다양한 그래프를 이용해서 실시간 데이터 변경 추이를 시각적으로 조회 할 수 있습니다.&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;원하는 데이터를 뽑아 적재하여 grafana로 가시화 할거며, 원하는 값을 뽑기 위해서는 select SQL쿼리를 가지고 프로메테우스로 뽑아 올 예정입니다.&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;Prometheus MySQL Exporter를 설치하기 위해서는 다음과 같은 Python 관련 패키지를 미리 설치 해야 합니다.&lt;/div&gt;
&lt;div&gt;-&amp;nbsp; Python 3.X 설치 : Python으로 개발한 프로그램을 설치하기 위해 필요.&lt;/div&gt;
&lt;div&gt;-&amp;nbsp; mysqlclient-python 설치 : Python용 MySQL 클라이언트로 MySQL에 접속하기 위해 필요.&lt;/div&gt;
&lt;div&gt;-&amp;nbsp; Prometheus Python Client 설치 : Prometheus 연동을 위한 Python 클라이언트&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ MySQL쿼리 exporter 설치&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;Download URL :&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://www.python.org/downloads/release/python-352/&quot;&gt;https://www.python.org/downloads/release/python-352/&lt;/a&gt;
&lt;figure id=&quot;og_1671349297656&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Python Release Python 3.5.2&quot; data-og-description=&quot;The official home of the Python Programming Language&quot; data-og-host=&quot;www.python.org&quot; data-og-source-url=&quot;https://www.python.org/downloads/release/python-352/&quot; data-og-url=&quot;https://www.python.org/downloads/release/python-352/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/LifPk/hyQU6hPVcq/jpMQSI42ZjOgdcY2mK4n7K/img.png?width=200&amp;amp;height=200&amp;amp;face=0_0_200_200&quot;&gt;&lt;a href=&quot;https://www.python.org/downloads/release/python-352/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.python.org/downloads/release/python-352/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/LifPk/hyQU6hPVcq/jpMQSI42ZjOgdcY2mK4n7K/img.png?width=200&amp;amp;height=200&amp;amp;face=0_0_200_200');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Python Release Python 3.5.2&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;The official home of the Python Programming Language&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.python.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div&gt;prometheus-mysql-exporter 를 설치하기 위해서는 Python 3 버전이 미리 설치되어 있어야 합니다.&lt;/div&gt;
&lt;div&gt;하지만 RHEL, CentOS 등의 범용 리눅스 6.X 버전에서는 Python 2.X 버전이 설치되어 있을 가능성이 있습니다. 그러므로 Python 3.X 버전을 추가로 설치해야 하며, 이때 2.X 버전은 삭제하지 않고 3.X 버전을 추가로 설치합니다.(2.X버전을 3.X 버전으로 대체한다면 기존의 2.X 버전을 연동하는 프로그램에 영향이 있을 수 있기 때문)&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;## 기존 파이썬 버전 확인&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1671349314468&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@prometheus ~]# python -V
Python 2.7.5&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;## 3.x 버전 설치&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1671349334579&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@prometheus ~]# wget https://www.python.org/ftp/python/3.11.0/Python-3.11.0.tar.xz

[root@prometheus ~]# tar -xvf Python-3.11.0.tar.xz

[root@prometheus ~]# cd Python-3.11.0/

[root@prometheus Python-3.11.0]# ./configure
...
checking for stdlib extension module _testbuffer... yes
checking for stdlib extension module _testimportmultiple... yes
checking for stdlib extension module _testmultiphase... yes
checking for stdlib extension module _xxtestfuzz... yes
checking for stdlib extension module _ctypes_test... yes
checking for stdlib extension module xxlimited... yes
checking for stdlib extension module xxlimited_35... yes
configure: creating ./config.status
config.status: creating Makefile.pre
config.status: creating Misc/python.pc
config.status: creating Misc/python-embed.pc
config.status: creating Misc/python-config.sh
config.status: creating Modules/Setup.bootstrap
config.status: creating Modules/Setup.stdlib
config.status: creating Modules/ld_so_aix
config.status: creating pyconfig.h
configure: creating Modules/Setup.local
configure: creating Makefile
configure:


[root@prometheus Python-3.11.0]# make &amp;amp;&amp;amp; make install


[root@prometheus Python-3.11.0]# python3.11 -V
Python 3.11.0&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ mysqlclient-python &amp;amp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;Prometheus Python Client 설치&amp;nbsp;&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1671349360664&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@prometheus ~]# yum install python3-devel mysql-devel -y

[root@prometheus ~]# pip3 install mysqlclient
WARNING: Running pip install with root privileges is generally not a good idea. Try `pip3 install --user` instead.
Collecting mysqlclient
  Downloading https://files.pythonhosted.org/packages/50/5f/eac919b88b9df39bbe4a855f136d58f80d191cfea34a3dcf96bf5d8ace0a/mysqlclient-2.1.1.tar.gz (88kB)
    100% |████████████████████████████████| 92kB 7.1MB/s
Installing collected packages: mysqlclient
  Running setup.py install for mysqlclient ... done
Successfully installed mysqlclient-2.1.1


[root@prometheus ~]# pip3 install prometheus-client
WARNING: Running pip install with root privileges is generally not a good idea. Try `pip3 install --user` instead.
Collecting prometheus-client
  Downloading https://files.pythonhosted.org/packages/2e/5e/4225463cdac1098aac718b1d8adf8f9dc3d6aaea55f4f85a2f7d572b4f7c/prometheus_client-0.15.0-py3-none-any.whl (60kB)
    100% |████████████████████████████████| 61kB 7.1MB/s
Installing collected packages: prometheus-client
Successfully installed prometheus-client-0.15.0&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ Prometheus MySQL Exporter 설치&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;Download URL :&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://github.com/Braedon/prometheus-mysql-exporter&quot;&gt;https://github.com/Braedon/prometheus-mysql-exporter&lt;/a&gt;
&lt;figure id=&quot;og_1671349387680&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - braedon/prometheus-mysql-exporter: Prometheus MySQL Exporter&quot; data-og-description=&quot;Prometheus MySQL Exporter. Contribute to braedon/prometheus-mysql-exporter development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/Braedon/prometheus-mysql-exporter&quot; data-og-url=&quot;https://github.com/braedon/prometheus-mysql-exporter&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/SToKO/hyQU7A2gnC/GYfnH62lf0HKCMjs8KxdTk/img.png?width=1200&amp;amp;height=600&amp;amp;face=961_118_1060_226&quot;&gt;&lt;a href=&quot;https://github.com/Braedon/prometheus-mysql-exporter&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/Braedon/prometheus-mysql-exporter&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/SToKO/hyQU7A2gnC/GYfnH62lf0HKCMjs8KxdTk/img.png?width=1200&amp;amp;height=600&amp;amp;face=961_118_1060_226');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - braedon/prometheus-mysql-exporter: Prometheus MySQL Exporter&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Prometheus MySQL Exporter. Contribute to braedon/prometheus-mysql-exporter development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;pre id=&quot;code_1671349396186&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@prometheus ~]# git clone https://github.com/braedon/prometheus-mysql-exporter.git


[root@prometheus prometheus-mysql-exporter]# cd /root/prometheus-mysql-exporter/prometheus_mysql_exporter



## select 결과 한글깨짐을 방지하기 위해 char set 추가
[root@prometheus prometheus_mysql_exporter]# vi __init__.py
...(생략)
    mysql_kwargs = dict(host=mysql_host,
                        port=mysql_port,
                        user=mysql_username,
                        password=mysql_password,
                        charset='utf8',
                        # Use autocommit mode to avoid keeping the same transaction across query
                        # runs when the connection is reused. Using the same transaction would
                        # prevent changes from being reflected in results, and therefore metrics.
                        # Note: Queries could theoretically change data...
                        autocommit=True)
    if mysql_timezone:
        mysql_kwargs['init_command'] = &quot;SET time_zone = '{}'&quot;.format(mysql_timezone)

    mysql_client = PersistentDB(creator=pymysql, **mysql_kwargs)

    if queries:
        for query_name, (interval, cron, cron_tz,
                         db_name, query, value_columns,
                         on_error, on_missing) in queries.items():
            schedule_job(scheduler, interval, cron, cron_tz,
                         run_query, mysql_client, query_name,
                         db_name, query, value_columns, on_error, on_missing)
    else:
        log.warning('No queries found in config file(s)')

    REGISTRY.register(QueryMetricCollector())

    log.info('Starting server...')
    start_http_server(port)
    log.info('Server started on port %(port)s', {'port': port})

    scheduler.run()
...(생략)







[root@mysql prometheus-mysql-exporter]# cd ..



[root@prometheus prometheus-mysql-exporter-master]# python3.6 setup.py install
running install
running bdist_egg
running egg_info
creating prometheus_mysql_exporter.egg-info
writing prometheus_mysql_exporter.egg-info/PKG-INFO
writing dependency_links to prometheus_mysql_exporter.egg-info/dependency_links.txt
writing entry points to prometheus_mysql_exporter.egg-info/entry_points.txt
writing requirements to prometheus_mysql_exporter.egg-info/requires.txt
writing top-level names to prometheus_mysql_exporter.egg-info/top_level.txt
writing manifest file 'prometheus_mysql_exporter.egg-info/SOURCES.txt'
reading manifest file 'prometheus_mysql_exporter.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
writing manifest file 'prometheus_mysql_exporter.egg-info/SOURCES.txt'
installing library code to build/bdist.linux-x86_64/egg
running install_lib
running build_py
creating build
creating build/lib
creating build/lib/prometheus_mysql_exporter
copying prometheus_mysql_exporter/__main__.py -&amp;gt; build/lib/prometheus_mysql_exporter
copying prometheus_mysql_exporter/metrics.py -&amp;gt; build/lib/prometheus_mysql_exporter
copying prometheus_mysql_exporter/parser.py -&amp;gt; build/lib/prometheus_mysql_exporter
copying prometheus_mysql_exporter/scheduler.py -&amp;gt; build/lib/prometheus_mysql_exporter
copying prometheus_mysql_exporter/utils.py -&amp;gt; build/lib/prometheus_mysql_exporter
copying prometheus_mysql_exporter/__init__.py -&amp;gt; build/lib/prometheus_mysql_exporter
creating build/bdist.linux-x86_64
creating build/bdist.linux-x86_64/egg
creating build/bdist.linux-x86_64/egg/prometheus_mysql_exporter
copying build/lib/prometheus_mysql_exporter/__main__.py -&amp;gt; build/bdist.linux-x86_64/egg/prometheus_mysql_exporter
copying build/lib/prometheus_mysql_exporter/metrics.py -&amp;gt; build/bdist.linux-x86_64/egg/prometheus_mysql_exporter
copying build/lib/prometheus_mysql_exporter/parser.py -&amp;gt; build/bdist.linux-x86_64/egg/prometheus_mysql_exporter
copying build/lib/prometheus_mysql_exporter/scheduler.py -&amp;gt; build/bdist.linux-x86_64/egg/prometheus_mysql_exporter
copying build/lib/prometheus_mysql_exporter/utils.py -&amp;gt; build/bdist.linux-x86_64/egg/prometheus_mysql_exporter
copying build/lib/prometheus_mysql_exporter/__init__.py -&amp;gt; build/bdist.linux-x86_64/egg/prometheus_mysql_exporter
byte-compiling build/bdist.linux-x86_64/egg/prometheus_mysql_exporter/__main__.py to __main__.cpython-36.pyc
byte-compiling build/bdist.linux-x86_64/egg/prometheus_mysql_exporter/metrics.py to metrics.cpython-36.pyc
byte-compiling build/bdist.linux-x86_64/egg/prometheus_mysql_exporter/parser.py to parser.cpython-36.pyc
byte-compiling build/bdist.linux-x86_64/egg/prometheus_mysql_exporter/scheduler.py to scheduler.cpython-36.pyc
byte-compiling build/bdist.linux-x86_64/egg/prometheus_mysql_exporter/utils.py to utils.cpython-36.pyc
byte-compiling build/bdist.linux-x86_64/egg/prometheus_mysql_exporter/__init__.py to __init__.cpython-36.pyc
creating build/bdist.linux-x86_64/egg/EGG-INFO
copying prometheus_mysql_exporter.egg-info/PKG-INFO -&amp;gt; build/bdist.linux-x86_64/egg/EGG-INFO
copying prometheus_mysql_exporter.egg-info/SOURCES.txt -&amp;gt; build/bdist.linux-x86_64/egg/EGG-INFO
copying prometheus_mysql_exporter.egg-info/dependency_links.txt -&amp;gt; build/bdist.linux-x86_64/egg/EGG-INFO
copying prometheus_mysql_exporter.egg-info/entry_points.txt -&amp;gt; build/bdist.linux-x86_64/egg/EGG-INFO
copying prometheus_mysql_exporter.egg-info/requires.txt -&amp;gt; build/bdist.linux-x86_64/egg/EGG-INFO
copying prometheus_mysql_exporter.egg-info/top_level.txt -&amp;gt; build/bdist.linux-x86_64/egg/EGG-INFO
zip_safe flag not set; analyzing archive contents...
creating dist
creating 'dist/prometheus_mysql_exporter-0.5.0-py3.6.egg' and adding 'build/bdist.linux-x86_64/egg' to it
removing 'build/bdist.linux-x86_64/egg' (and everything under it)
Processing prometheus_mysql_exporter-0.5.0-py3.6.egg
Copying prometheus_mysql_exporter-0.5.0-py3.6.egg to /usr/local/lib/python3.6/site-packages
Adding prometheus-mysql-exporter 0.5.0 to easy-install.pth file
Installing prometheus-mysql-exporter script to /usr/local/bin
...(생략)
Installed /usr/local/lib/python3.6/site-packages/zipp-3.11.0-py3.6.egg
Searching for typing-extensions&amp;gt;=3.6.4
Reading https://pypi.org/simple/typing-extensions/
Downloading https://files.pythonhosted.org/packages/0b/8e/f1a0a5a76cfef77e1eb6004cb49e5f8d72634da638420b9ea492ce8305e8/typing_extensions-4.4.0-py3-none-any.whl#sha256=16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e
Best match: typing-extensions 4.4.0
Processing typing_extensions-4.4.0-py3-none-any.whl
Installing typing_extensions-4.4.0-py3-none-any.whl to /usr/local/lib/python3.6/site-packages
Adding typing-extensions 4.4.0 to easy-install.pth file

Installed /usr/local/lib/python3.6/site-packages/typing_extensions-4.4.0-py3.6.egg
Searching for prometheus-client==0.15.0
Best match: prometheus-client 0.15.0
Adding prometheus-client 0.15.0 to easy-install.pth file

Using /usr/local/lib/python3.6/site-packages
Searching for six==1.14.0
Best match: six 1.14.0
Adding six 1.14.0 to easy-install.pth file

Using /usr/lib/python3.6/site-packages
Finished processing dependencies for prometheus-mysql-exporter==0.5.0








--============================================================================
-- 다음과 같이 에러가 발생한다면,
--  /etc/ld.so.conf 에 MySQL 라이브러리가 등록되었는지 확인하여 추가해준다.
--============================================================================
[root@pmmclient mysqlclient-1.3.9-py3.5-linux-x86_64.egg]# prometheus-mysql-exporter --help
Traceback (most recent call last):
  File &quot;/usr/local/bin/prometheus-mysql-exporter&quot;, line 9, in &amp;lt;module&amp;gt;
    load_entry_point('prometheus-mysql-exporter==0.2.0.dev1', 'console_scripts', 'prometheus-mysql-exporter')()
  File &quot;/usr/local/lib/python3.5/site-packages/pkg_resources/__init__.py&quot;, line 542, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File &quot;/usr/local/lib/python3.5/site-packages/pkg_resources/__init__.py&quot;, line 2569, in load_entry_point
    return ep.load()
  File &quot;/usr/local/lib/python3.5/site-packages/pkg_resources/__init__.py&quot;, line 2229, in load
    return self.resolve()
  File &quot;/usr/local/lib/python3.5/site-packages/pkg_resources/__init__.py&quot;, line 2235, in resolve
    module = __import__(self.module_name, fromlist=['__name__'], level=0)
  File &quot;/usr/local/lib/python3.5/site-packages/prometheus_mysql_exporter-0.2.0.dev1-py3.5.egg/prometheus_mysql_exporter/__init__.py&quot;, line 7, in &amp;lt;module&amp;gt;
  File &quot;/usr/local/lib/python3.5/site-packages/mysqlclient-1.3.9-py3.5-linux-x86_64.egg/MySQLdb/__init__.py&quot;, line 19, in &amp;lt;module&amp;gt;
    import _mysql
ImportError: libmysqlclient.so.18: cannot open shared object file: No such file or directory


[root@pmmclient constants]# cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
/usr/lib64


[root@pmmclient constants]# echo /home/mysql/MySQL/lib &amp;gt;&amp;gt; /etc/ld.so.conf &amp;amp;&amp;amp; ldconfig


[root@pmmclient constants]# cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
/usr/lib64
/home/mysql/MySQL/lib&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ 모니터링 테스트 데이터 생성&amp;nbsp;&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1671349559570&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;create database kim;

use kim;


create table vote_candidate
        (
              candidate_id    int           not null auto_increment
            , candidate_name  varchar(100)  not null
            , votes_cnt       bigint        not null
            , primary key(candidate_id)
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='후보';



create table vote_hist
        (
              vote_hist_seq   bigint        not null auto_increment
            , candidate_id    int           not null
            , vote_date       datetime      not null
            , primary key(vote_hist_seq)
            , key vote_hist_idx01(vote_date, candidate_id)
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='투표이력';




insert into vote_candidate(candidate_name, votes_cnt) values('A후보',12);
insert into vote_candidate(candidate_name, votes_cnt) values('B후보',13);
insert into vote_candidate(candidate_name, votes_cnt) values('C후보',14);
insert into vote_candidate(candidate_name, votes_cnt) values('D후보',15);
insert into vote_candidate(candidate_name, votes_cnt) values('E후보',16);





mysql&amp;gt; select * from vote_candidate order by candidate_id;
+--------------+----------------+-----------+
| candidate_id | candidate_name | votes_cnt |
+--------------+----------------+-----------+
|            1 | A후보          |        12 |
|            2 | B후보          |        13 |
|            3 | C후보          |        14 |
|            4 | D후보          |        15 |
|            5 | E후보          |        16 |
+--------------+----------------+-----------+
5 rows in set (0.00 sec)





## 최근 5초간 후보별 득표수 조회
select
  vc.candidate_id, vc.candidate_name, ifnull(taba.cnt,0) as cnt
from kim.vote_candidate vc
        left join
        (
            select candidate_id, count(*) as cnt
            from kim.vote_hist
            where vote_date between date_add(now(), interval -5 second) and now()
            group by candidate_id
        ) taba on vc.candidate_id = taba.candidate_id;
+--------------+----------------+-----+
| candidate_id | candidate_name | cnt |
+--------------+----------------+-----+
|            1 | A후보          |   0 |
|            2 | B후보          |   0 |
|            3 | C후보          |   0 |
|            4 | D후보          |   0 |
|            5 | E후보          |   0 |
+--------------+----------------+-----+&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ Prometheus MySQL Exporter 설정 및 기동&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;Prometheus MySQL Exporter에서 사용하는 MySQL 데이터 추출용 SQL은 별도의 쿼리 설정 파일로 설정합니다.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;이 파일을 &amp;ldquo;exporter.cfg&amp;rdquo;로 명명하고 별도의 디렉토리에 생성하여 다음과 같이 추출 SQL을 등록합니다.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;Prometheus MySQL Exporter 기본 포트&lt;/span&gt; : 8090&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;[query_vote_total]&amp;nbsp;&lt;/span&gt;: 쿼리헤더. 반드시 &amp;ldquo;query_&amp;rdquo;로 시작&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;div&gt;QueryIntervalSecs = 5 : 쿼리 실행 주기(초)&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;QueryStatement = SELECT candidate_id, candidate_name, votes_cnt as cnt FROM votedb.vote_candidate;&amp;nbsp; : 데이터 추출용 쿼리, Like 연산자 등에서 &amp;lsquo;%&amp;rsquo;글자를 사용한다면 이스케이프 문자를 포함해야 합니다.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;QueryValueColumns = cnt : 쿼리 결과값에 대한 컬럼명&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1671349588570&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@prometheus ~]# cd /root/prometheus-mysql-exporter-master


[root@prometheus prometheus-mysql-exporter-master]# vi exporter.cfg
(다 지우고)
[query_vote_total]
QueryIntervalSecs = 5
QueryStatement = SELECT candidate_id, candidate_name, votes_cnt as cnt FROM kim.vote_candidate;
QueryValueColumns = cnt
querydatabase=kim

[query_vote_5second]
QueryIntervalSecs = 5
QueryStatement = select vc.candidate_id, vc.candidate_name, ifnull(taba.cnt,0) as cnt from kim.vote_candidate vc left join (select candidate_id, count(*) as cnt from kim.vote_hist where vote_date between date_add(now(), interval -5 second) and now() group by candidate_id) taba on vc.candidate_id = taba.candidate_id;
QueryValueColumns = cnt
querydatabase=kim





## MySQL Exporter 기동 
exporter.cfg에 기재된 쿼리가 문법적으로 맞지 않을때 에러 발생
[root@prometheus prometheus-mysql-exporter-master]# nohup prometheus-mysql-exporter --port=8090 --mysql-server=101.101.208.34:3306 --mysql-user=prouser --mysql-password=prouser --config-file=/root/prometheus-mysql-exporter-master/exporter.cfg &amp;gt; /root/prometheus-mysql-exporter-master/prometheus-mysql-exporter.log 2&amp;gt;&amp;amp;1 &amp;amp;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ Prometheus 설정 파일 변경 (클라이언트 추가)&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1671349603980&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@prometheus ~]# cd prometheus-2.40.5.linux-amd64/



[root@prometheus prometheus-2.40.5.linux-amd64]# vi prometheus.yml
...(생략)
  - job_name: &quot;prometheus&quot;

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
      - targets: [&quot;localhost:9090&quot;]

##OS MONITOR
  - job_name: linux
    static_configs:
      - targets: ['192.168.100.85:9100']

##DB MONITOR
  - job_name: mysql
    static_configs:
      - targets: ['192.168.100.85:9104']

##Query MONITOR
  - job_name: 'mysqlqueryresult'
    scrape_interval: 5s
    static_configs:
      - targets: ['192.168.100.85:8090']
        labels:
          alias: &quot;kim:3306&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ Prometheus 재기동&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1671349627440&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@prometheus ~]# ps -ef | grep prometheus
root       891     1  0 08:33 ?        00:00:00 /sbin/dhclient -H prometheus -1 -q -lf /var/lib/dhclient/dhclient--eth0.lease -pf /var/run/dhclient-eth0.pid eth0
root      9873  2311  0 10:59 pts/0    00:00:00 /usr/bin/python3.6 /usr/local/bin/prometheus-mysql-exporter --port=8090 --mysql-server=101.101.208.34:3306 --mysql-user=prouser --mysql-password=prouser --config-file=/root/prometheus-mysql-exporter-master/exporter.cfg
root     10252  2311  0 11:06 pts/0    00:00:00 grep --color=auto prometheus


[root@prometheus ~]# kill -9 9873


[root@prometheus ~]# nohup /root/prometheus-2.40.5.linux-amd64/prometheus --config.file=/root/prometheus-2.40.5.linux-amd64/prometheus.yml  --log.level=info &amp;gt; /root/prometheus-2.40.5.linux-amd64/prometheus.log 2&amp;gt;&amp;amp;1 &amp;amp;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ Prometheus 웹 서비스 접속 확인&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1569&quot; data-origin-height=&quot;653&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/baReXd/btrTQPFn0Jd/GMGbzK64mF78kf6eAyJjhK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/baReXd/btrTQPFn0Jd/GMGbzK64mF78kf6eAyJjhK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/baReXd/btrTQPFn0Jd/GMGbzK64mF78kf6eAyJjhK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbaReXd%2FbtrTQPFn0Jd%2FGMGbzK64mF78kf6eAyJjhK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1569&quot; height=&quot;653&quot; data-origin-width=&quot;1569&quot; data-origin-height=&quot;653&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■&lt;/span&gt; &lt;span&gt;쿼리에 의해 추출&amp;nbsp;&lt;/span&gt;&lt;span&gt;데이터 확인&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1892&quot; data-origin-height=&quot;408&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cm0bb1/btrTQQxzQ0W/6uZDqHW9uOFmSHYn7zS8l0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cm0bb1/btrTQQxzQ0W/6uZDqHW9uOFmSHYn7zS8l0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cm0bb1/btrTQQxzQ0W/6uZDqHW9uOFmSHYn7zS8l0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcm0bb1%2FbtrTQQxzQ0W%2F6uZDqHW9uOFmSHYn7zS8l0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1892&quot; height=&quot;408&quot; data-origin-width=&quot;1892&quot; data-origin-height=&quot;408&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ 해당 쿼리 결과 Grafana 대시보드 구성&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;http://&amp;lt;Public IP&amp;gt;:3000&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;Dashboards -&amp;gt; new -&amp;gt; Edit&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1030&quot; data-origin-height=&quot;311&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOumNt/btrTSM1Pgw5/xQVR3qgc2wXfF0LSPpZk0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOumNt/btrTSM1Pgw5/xQVR3qgc2wXfF0LSPpZk0k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOumNt/btrTSM1Pgw5/xQVR3qgc2wXfF0LSPpZk0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOumNt%2FbtrTSM1Pgw5%2FxQVR3qgc2wXfF0LSPpZk0k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1030&quot; height=&quot;311&quot; data-origin-width=&quot;1030&quot; data-origin-height=&quot;311&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ Query -&amp;gt; Metric -&amp;gt; vote_total_cnt&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;Legend 수정(그래프 위치 수정)&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1908&quot; data-origin-height=&quot;921&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1idvP/btrTRB0Z7iN/iG2LcbE6kILm8rlrLGoKak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1idvP/btrTRB0Z7iN/iG2LcbE6kILm8rlrLGoKak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1idvP/btrTRB0Z7iN/iG2LcbE6kILm8rlrLGoKak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1idvP%2FbtrTRB0Z7iN%2FiG2LcbE6kILm8rlrLGoKak%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1908&quot; height=&quot;921&quot; data-origin-width=&quot;1908&quot; data-origin-height=&quot;921&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ 데이터 현황 확인&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;데이터 입력 후 그래프 확인&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;985&quot; data-origin-height=&quot;401&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZ35go/btrTVgOSF9S/IO60dfMdABWFkUIY9roQBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZ35go/btrTVgOSF9S/IO60dfMdABWFkUIY9roQBK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZ35go/btrTVgOSF9S/IO60dfMdABWFkUIY9roQBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZ35go%2FbtrTVgOSF9S%2FIO60dfMdABWFkUIY9roQBK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;985&quot; height=&quot;401&quot; data-origin-width=&quot;985&quot; data-origin-height=&quot;401&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;참고&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;http://mysqldbadmtech.blogspot.com/2016/12/pmm-180-mysql-prometheus-mysql-exporter.html&quot;&gt;http://mysqldbadmtech.blogspot.com/2016/12/pmm-180-mysql-prometheus-mysql-exporter.html&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1671349273562&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;[PMM] #180 MySQL 데이터 모니터링 &amp;ndash; Prometheus MySQL Exporter&quot; data-og-description=&quot;MySQL DB Administration Tech&quot; data-og-host=&quot;mysqldbadmtech.blogspot.com&quot; data-og-source-url=&quot;http://mysqldbadmtech.blogspot.com/2016/12/pmm-180-mysql-prometheus-mysql-exporter.html&quot; data-og-url=&quot;http://mysqldbadmtech.blogspot.com/2016/12/pmm-180-mysql-prometheus-mysql-exporter.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bzMBjO/hyQUZC1bYg/MovfpnBJfI9Jy6txkQyLP1/img.jpg?width=339&amp;amp;height=178&amp;amp;face=0_0_339_178,https://scrap.kakaocdn.net/dn/b2dbOZ/hyQUZbWzzL/roWyFKzpviWG82PYvkKa4K/img.jpg?width=400&amp;amp;height=327&amp;amp;face=0_0_400_327,https://scrap.kakaocdn.net/dn/bVJAPV/hyQU7nwG0h/AxqX4Bj3yFg5RUgAT7Kuck/img.jpg?width=400&amp;amp;height=270&amp;amp;face=0_0_400_270&quot;&gt;&lt;a href=&quot;http://mysqldbadmtech.blogspot.com/2016/12/pmm-180-mysql-prometheus-mysql-exporter.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;http://mysqldbadmtech.blogspot.com/2016/12/pmm-180-mysql-prometheus-mysql-exporter.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bzMBjO/hyQUZC1bYg/MovfpnBJfI9Jy6txkQyLP1/img.jpg?width=339&amp;amp;height=178&amp;amp;face=0_0_339_178,https://scrap.kakaocdn.net/dn/b2dbOZ/hyQUZbWzzL/roWyFKzpviWG82PYvkKa4K/img.jpg?width=400&amp;amp;height=327&amp;amp;face=0_0_400_327,https://scrap.kakaocdn.net/dn/bVJAPV/hyQU7nwG0h/AxqX4Bj3yFg5RUgAT7Kuck/img.jpg?width=400&amp;amp;height=270&amp;amp;face=0_0_400_270');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[PMM] #180 MySQL 데이터 모니터링 &amp;ndash; Prometheus MySQL Exporter&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;MySQL DB Administration Tech&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;mysqldbadmtech.blogspot.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>Others/DB Monitoring</category>
      <category>grafana</category>
      <category>mysql_exporter</category>
      <category>Prometheus</category>
      <author>jeonghyun</author>
      <guid isPermaLink="true">https://jhdatabase.tistory.com/130</guid>
      <comments>https://jhdatabase.tistory.com/entry/Prometheus-%EC%9B%90%ED%95%98%EB%8A%94-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%BD%91%EA%B8%B0-part-3-use-mysqlexporter#entry130comment</comments>
      <pubDate>Sun, 18 Dec 2022 16:50:53 +0900</pubDate>
    </item>
    <item>
      <title>[Prometheus - exporter 설치 &amp;amp; Grafana] part 2</title>
      <link>https://jhdatabase.tistory.com/entry/Promethues-exporter-%EC%84%A4%EC%B9%98-Grafana-part-2</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;&amp;nbsp;Prometheus 메트릭 수집을 위한 exporter 구축 (mysql서버&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ Exporter 설치&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;download URL :&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://prometheus.io/download/&quot;&gt;https://prometheus.io/download/&lt;/a&gt;
&lt;figure id=&quot;og_1671348413453&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Download | Prometheus&quot; data-og-description=&quot;An open-source monitoring system with a dimensional data model, flexible query language, efficient time series database and modern alerting approach.&quot; data-og-host=&quot;prometheus.io&quot; data-og-source-url=&quot;https://prometheus.io/download/&quot; data-og-url=&quot;https://prometheus.io/download/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bofEwB/hyQWCTIkaH/CYDWDpomTRHyZpOJQfe7SK/img.png?width=192&amp;amp;height=192&amp;amp;face=0_0_192_192&quot;&gt;&lt;a href=&quot;https://prometheus.io/download/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://prometheus.io/download/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bofEwB/hyQWCTIkaH/CYDWDpomTRHyZpOJQfe7SK/img.png?width=192&amp;amp;height=192&amp;amp;face=0_0_192_192');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Download | Prometheus&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;An open-source monitoring system with a dimensional data model, flexible query language, efficient time series database and modern alerting approach.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;prometheus.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div&gt;&lt;b&gt;mysqld_exporter와 node_exporter 두개를 설치합니다.&amp;nbsp;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;mysqld_exporter&lt;/span&gt; -&amp;gt;&amp;nbsp;MySQL 서버의 상태를 수집&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;node_exporter&lt;/span&gt; -&amp;gt;&amp;nbsp;해당 서버의 시스템 상태를 수집&lt;/b&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1671348447293&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@mysql ~]# wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.14.0/mysqld_exporter-0.14.0.linux-amd64.tar.gz


[root@mysql ~]# wget https://github.com/prometheus/node_exporter/releases/download/v1.5.0/node_exporter-1.5.0.linux-amd64.tar.gz



[root@mysql ~]# tar -zxvf mysqld_exporter-0.14.0.linux-amd64.tar.gz
mysqld_exporter-0.14.0.linux-amd64/
mysqld_exporter-0.14.0.linux-amd64/LICENSE
mysqld_exporter-0.14.0.linux-amd64/NOTICE
mysqld_exporter-0.14.0.linux-amd64/mysqld_exporter


[root@mysql ~]# tar -xvf node_exporter-1.5.0.linux-amd64.tar.gz
node_exporter-1.5.0.linux-amd64/
node_exporter-1.5.0.linux-amd64/LICENSE
node_exporter-1.5.0.linux-amd64/NOTICE
node_exporter-1.5.0.linux-amd64/node_exporter&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ Exporter 실행&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;node_exporter 는 특별한 conf 설정없이 바이너리 파일을 바로 실행 가능&lt;/div&gt;
&lt;div&gt;node_exporter 의 기본 포트는 9100입니다.&lt;/div&gt;
&lt;pre id=&quot;code_1671348472206&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@mysql ~]# cd node_exporter-1.5.0.linux-amd64/
[root@mysql node_exporter-1.5.0.linux-amd64]# ./node_exporter &amp;amp;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;mysqld_exporter 는 MySQL 서버에 접속하여 변수들을 수집해야하기 때문에, 접속할 계정이 필요&lt;/div&gt;
&lt;div&gt;mysqld_exporter 의 기본 포트는 9104입니다.&lt;/div&gt;
&lt;pre id=&quot;code_1671348500929&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; create user 'prouser'@'%' identified by 'prouser';
Query OK, 0 rows affected (0.01 sec)

mysql&amp;gt; grant all on *.* to 'prouser'@'%';
Query OK, 0 rows affected (0.00 sec)



## conf 파일을 통해 해당 접속 유저 명시
[root@mysql mysqld_exporter-0.14.0.linux-amd64]# vi /root/.my.cnf
[client]
user=prouser
password=prouser


[root@prometheus ~]# cd mysqld_exporter-0.14.0.linux-amd64/


[root@mysql mysqld_exporter-0.14.0.linux-amd64]# ./mysqld_exporter &amp;amp;
[2] 6376
[root@prometheus mysqld_exporter-0.14.0.linux-amd64]# ts=2022-12-02T01:35:34.851Z caller=mysqld_exporter.go:277 level=info msg=&quot;Starting mysqld_exporter&quot; version=&quot;(version=0.14.0, branch=HEAD, revision=ca1b9af82a471c849c529eb8aadb1aac73e7b68c)&quot;
ts=2022-12-02T01:35:34.851Z caller=mysqld_exporter.go:278 level=info msg=&quot;Build context&quot; (gogo1.17.8,userroot@401d370ca42e,date20220304-16:25:15)=(MISSING)
ts=2022-12-02T01:35:34.851Z caller=mysqld_exporter.go:293 level=info msg=&quot;Scraper enabled&quot; scraper=global_status
ts=2022-12-02T01:35:34.851Z caller=mysqld_exporter.go:293 level=info msg=&quot;Scraper enabled&quot; scraper=global_variables
ts=2022-12-02T01:35:34.851Z caller=mysqld_exporter.go:293 level=info msg=&quot;Scraper enabled&quot; scraper=slave_status
ts=2022-12-02T01:35:34.851Z caller=mysqld_exporter.go:293 level=info msg=&quot;Scraper enabled&quot; scraper=info_schema.innodb_cmp
ts=2022-12-02T01:35:34.851Z caller=mysqld_exporter.go:293 level=info msg=&quot;Scraper enabled&quot; scraper=info_schema.innodb_cmpmem
ts=2022-12-02T01:35:34.851Z caller=mysqld_exporter.go:293 level=info msg=&quot;Scraper enabled&quot; scraper=info_schema.query_response_time
ts=2022-12-02T01:35:34.851Z caller=mysqld_exporter.go:303 level=info msg=&quot;Listening on address&quot; address=:9104
ts=2022-12-02T01:35:34.851Z caller=tls_config.go:195 level=info msg=&quot;TLS is disabled.&quot; http2=false&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■&amp;nbsp;prometheus에서 메트릭을 수집 확인&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;1. exporter 들은 자신이 열어둔 port 를 통해 수집한 메트릭을 띄워놓습니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;2. prometheus 는 설정된 target server 의 port 로 접근하여 띄워진 메트릭을 수집해갑니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;prometheus 웹페이지에서 Status -&amp;gt; Targets 탭에 들어가면 state가 UP상태여야 합니다.&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1908&quot; data-origin-height=&quot;726&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BMyF6/btrTQQRQD0n/zjx4qeZosR5lIjRNgkRkYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BMyF6/btrTQQRQD0n/zjx4qeZosR5lIjRNgkRkYK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BMyF6/btrTQQRQD0n/zjx4qeZosR5lIjRNgkRkYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBMyF6%2FbtrTQQRQD0n%2Fzjx4qeZosR5lIjRNgkRkYK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1908&quot; height=&quot;726&quot; data-origin-width=&quot;1908&quot; data-origin-height=&quot;726&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;Grafana 이용 가시화&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ Grafana 설치 및 기동&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;Download URL :&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://grafana.com/grafana/download/9.2.6?platform=linux&quot;&gt;https://grafana.com/grafana/download/9.2.6?platform=linux&lt;/a&gt;
&lt;figure id=&quot;og_1671348557090&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Download Grafana | Grafana Labs&quot; data-og-description=&quot;Overview of how to download and install different versions of Grafana on different operating systems.&quot; data-og-host=&quot;grafana.com&quot; data-og-source-url=&quot;https://grafana.com/grafana/download/9.2.6?platform=linux&quot; data-og-url=&quot;https://grafana.com/grafana/download/9.2.6?platform=linux&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bbKQ1Q/hyQWGBOTjQ/wiZlQForclM3InEnYGRlqk/img.png?width=900&amp;amp;height=780&amp;amp;face=0_0_900_780&quot;&gt;&lt;a href=&quot;https://grafana.com/grafana/download/9.2.6?platform=linux&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://grafana.com/grafana/download/9.2.6?platform=linux&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bbKQ1Q/hyQWGBOTjQ/wiZlQForclM3InEnYGRlqk/img.png?width=900&amp;amp;height=780&amp;amp;face=0_0_900_780');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Download Grafana | Grafana Labs&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Overview of how to download and install different versions of Grafana on different operating systems.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;grafana.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div&gt;grafana server 의 기본 포트는 3000입니다.&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ http://&amp;lt;Public IP&amp;gt;:3000&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;※ 초기 계정&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;ID = admin&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;PW = admin&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1161&quot; data-origin-height=&quot;836&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BuA1Z/btrTWNlopvF/yuKxElppYiVwxRS1QVANok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BuA1Z/btrTWNlopvF/yuKxElppYiVwxRS1QVANok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BuA1Z/btrTWNlopvF/yuKxElppYiVwxRS1QVANok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBuA1Z%2FbtrTWNlopvF%2FyuKxElppYiVwxRS1QVANok%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1161&quot; height=&quot;836&quot; data-origin-width=&quot;1161&quot; data-origin-height=&quot;836&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;Prometheus 연동&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ 첫 접속 화면&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1909&quot; data-origin-height=&quot;925&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CiPmw/btrTTpZJVaG/rrsmo2fiaFmuIKIUVt4Qk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CiPmw/btrTTpZJVaG/rrsmo2fiaFmuIKIUVt4Qk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CiPmw/btrTTpZJVaG/rrsmo2fiaFmuIKIUVt4Qk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCiPmw%2FbtrTTpZJVaG%2Frrsmo2fiaFmuIKIUVt4Qk1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1909&quot; height=&quot;925&quot; data-origin-width=&quot;1909&quot; data-origin-height=&quot;925&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ Datasource 설정&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;Configuration -&amp;gt; Data Sources 탭 선택 -&amp;gt; Add data Source&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1898&quot; data-origin-height=&quot;906&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eHwBQP/btrTZyVGqib/1iFXnyoxL88YspF64Z3IIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eHwBQP/btrTZyVGqib/1iFXnyoxL88YspF64Z3IIK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eHwBQP/btrTZyVGqib/1iFXnyoxL88YspF64Z3IIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeHwBQP%2FbtrTZyVGqib%2F1iFXnyoxL88YspF64Z3IIK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1898&quot; height=&quot;906&quot; data-origin-width=&quot;1898&quot; data-origin-height=&quot;906&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ Prometheus 선택&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1809&quot; data-origin-height=&quot;898&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wa4f6/btrTRdlHRiy/5ZVcJWuTnu5TRh3goABPn0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wa4f6/btrTRdlHRiy/5ZVcJWuTnu5TRh3goABPn0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wa4f6/btrTRdlHRiy/5ZVcJWuTnu5TRh3goABPn0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fwa4f6%2FbtrTRdlHRiy%2F5ZVcJWuTnu5TRh3goABPn0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1809&quot; height=&quot;898&quot; data-origin-width=&quot;1809&quot; data-origin-height=&quot;898&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ config 설정&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;HTTP URL에 prometheus 서버 ip 기입 , &lt;/span&gt;&lt;span&gt;저장&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;616&quot; data-origin-height=&quot;868&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/t9KGU/btrTWOdub2U/RdoWqfZdQcdmZM5LTlgfV1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/t9KGU/btrTWOdub2U/RdoWqfZdQcdmZM5LTlgfV1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/t9KGU/btrTWOdub2U/RdoWqfZdQcdmZM5LTlgfV1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ft9KGU%2FbtrTWOdub2U%2FRdoWqfZdQcdmZM5LTlgfV1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;616&quot; height=&quot;868&quot; data-origin-width=&quot;616&quot; data-origin-height=&quot;868&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ Grafana 그래프 표현&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;Dashboards -&amp;gt; New dashborad -&amp;gt; add panel -&amp;gt; 아래 쿼리 매트릭을 보고자하는 것으로 지정(mysql_global_status_queries) -&amp;gt; Run queries 클릭 -&amp;gt; 그래프 조회&lt;/div&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1906&quot; data-origin-height=&quot;906&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pzeIN/btrTTpyGviv/KO5Ad3eMqxcBN38DWk6Sc1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pzeIN/btrTTpyGviv/KO5Ad3eMqxcBN38DWk6Sc1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pzeIN/btrTTpyGviv/KO5Ad3eMqxcBN38DWk6Sc1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpzeIN%2FbtrTTpyGviv%2FKO5Ad3eMqxcBN38DWk6Sc1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1906&quot; height=&quot;906&quot; data-origin-width=&quot;1906&quot; data-origin-height=&quot;906&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;</description>
      <category>Others/DB Monitoring</category>
      <category>exporter</category>
      <category>grafana</category>
      <category>mysqld_exporter</category>
      <category>node_exporter</category>
      <category>promethues</category>
      <author>jeonghyun</author>
      <guid isPermaLink="true">https://jhdatabase.tistory.com/129</guid>
      <comments>https://jhdatabase.tistory.com/entry/Promethues-exporter-%EC%84%A4%EC%B9%98-Grafana-part-2#entry129comment</comments>
      <pubDate>Sun, 18 Dec 2022 16:35:37 +0900</pubDate>
    </item>
    <item>
      <title>[Prometheus - MySQL모니터링 서버 설치] part 1</title>
      <link>https://jhdatabase.tistory.com/entry/Promethues-MySQL%EB%AA%A8%EB%8B%88%ED%84%B0%EB%A7%81-%EC%84%9C%EB%B2%84-%EC%84%A4%EC%B9%98-part-1</link>
      <description>&lt;div&gt;&lt;b&gt;&lt;span&gt;Prometheus란&lt;/span&gt;,&amp;nbsp;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;Apache 2 라이센스로 공개되어 있는 오픈소스로 모니터링 툴입니다.&lt;/div&gt;
&lt;div&gt;다른 모니터링 도구와 가장 다른 점은 대부분의 모니터링 도구가 Push 방식 즉, 각 서버에 클라이언트를 설치하고 이 클라이언트가 메트릭 데이터를 수집해서 서버로 보내면 서버가 모니터링 상태를 보여주는 방식인데 반해서 &lt;span&gt;Prometheus는 Pull 방식입니다.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;그래서 서버가 각 클라이언트를 알고 있어야 하는게 아니라 서버에 클라이언트가 떠 있으면 서버가 주기적으로 클라이언트에 접속해서 데이터를 가져오는 방식입니다. 따라서 &lt;span&gt;모니터링 대상 서버의 모니터링으로 인해 발생하는 부하를 줄여줍니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;프로메테우스는&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;Time-series DB&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이기 때문에 시간과 함께 데이터를 저장합니다.&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;Exporter란&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;모니터링 대상의 Metric 데이터를 수집하고 Prometheus가 접속했을 때 정보를 알려주는 역할을 합니다.&lt;/div&gt;
&lt;div&gt;Prometheus Server는 Expoter가 열어놓은 HTTP 엔드포인트에 접속해서 Metric을 수집합니다. (Pull 방식)&lt;/div&gt;
&lt;div&gt;Prometheus Server에 Grafana를 연동해서 대시보드 등의 시각화를 하고,&amp;nbsp;알림을 받을 규칙을 만들면 Alert Manager가 규칙에 따라 알림을 보냅니다.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;이번 테스트에선&amp;nbsp;&lt;/div&gt;
&lt;div&gt;서버 리소스 모니터링 -&amp;gt; node_exporter&lt;/div&gt;
&lt;div&gt;DB 모니터링 -&amp;gt; mysql_exporter&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;&amp;nbsp;테스트 환경 &lt;/b&gt;&lt;/blockquote&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;&lt;span&gt;Hostname&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;IP&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;Role&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;prometheus&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;192.168.100.84&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;모니터링 서버&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;mysql&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;192.168.100.85&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;모니터링 대상 서버&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;사전 mysql설치 (mysql)&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1671347932316&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; select @@version;
+-----------+
| @@version |
+-----------+
| 8.0.28    |
+-----------+&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ Prometheus 설치&amp;nbsp;&lt;/span&gt;&lt;span&gt;(p&lt;/span&gt;&lt;span&gt;rometheus)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;Download URL :&amp;nbsp;&lt;a href=&quot;https://prometheus.io/download/&quot;&gt;https://prometheus.io/download/&lt;/a&gt;
&lt;figure id=&quot;og_1671347972787&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Download | Prometheus&quot; data-og-description=&quot;An open-source monitoring system with a dimensional data model, flexible query language, efficient time series database and modern alerting approach.&quot; data-og-host=&quot;prometheus.io&quot; data-og-source-url=&quot;https://prometheus.io/download/&quot; data-og-url=&quot;https://prometheus.io/download/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bofEwB/hyQWCTIkaH/CYDWDpomTRHyZpOJQfe7SK/img.png?width=192&amp;amp;height=192&amp;amp;face=0_0_192_192&quot;&gt;&lt;a href=&quot;https://prometheus.io/download/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://prometheus.io/download/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bofEwB/hyQWCTIkaH/CYDWDpomTRHyZpOJQfe7SK/img.png?width=192&amp;amp;height=192&amp;amp;face=0_0_192_192');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Download | Prometheus&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;An open-source monitoring system with a dimensional data model, flexible query language, efficient time series database and modern alerting approach.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;prometheus.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;pre id=&quot;code_1671347979831&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@prometheus ~]# wget https://github.com/prometheus/prometheus/releases/download/v2.40.5/prometheus-2.40.5.linux-amd64.tar.gz


[root@prometheus ~]# tar -zxvf prometheus-2.40.5.linux-amd64.tar.gz
prometheus-2.40.5.linux-amd64/
prometheus-2.40.5.linux-amd64/NOTICE
prometheus-2.40.5.linux-amd64/promtool
prometheus-2.40.5.linux-amd64/consoles/
prometheus-2.40.5.linux-amd64/consoles/prometheus-overview.html
prometheus-2.40.5.linux-amd64/consoles/node-disk.html
prometheus-2.40.5.linux-amd64/consoles/node.html
prometheus-2.40.5.linux-amd64/consoles/node-cpu.html
prometheus-2.40.5.linux-amd64/consoles/prometheus.html
prometheus-2.40.5.linux-amd64/consoles/node-overview.html
prometheus-2.40.5.linux-amd64/consoles/index.html.example
prometheus-2.40.5.linux-amd64/console_libraries/
prometheus-2.40.5.linux-amd64/console_libraries/menu.lib
prometheus-2.40.5.linux-amd64/console_libraries/prom.lib
prometheus-2.40.5.linux-amd64/prometheus
prometheus-2.40.5.linux-amd64/prometheus.yml
prometheus-2.40.5.linux-amd64/LICENSE&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ Config 수정&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1671347996581&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@prometheus ~]# cd prometheus-2.40.5.linux-amd64/

[root@prometheus prometheus-2.40.5.linux-amd64]# vi prometheus.yml

  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - &quot;first_rules.yml&quot;
  # - &quot;second_rules.yml&quot;

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=&amp;lt;job_name&amp;gt;` to any timeseries scraped from this config.
  - job_name: &quot;prometheus&quot;

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
      - targets: [&quot;localhost:9090&quot;]

##OS MONITOR
  - job_name: linux
    static_configs:      
      - targets: ['192.168.100.85:9100']  ## node_exporter

##DB MONITOR
  - job_name: mysql
    static_configs:
      - targets: ['192.168.100.85:9104']  ## mysqld_exporter&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;■ Prometheus 기동&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1671348040016&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@prometheus prometheus-2.40.5.linux-amd64]#./prometheus --config.file=&quot;prometheus.yml&quot; &amp;amp;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ default 페이지 접속&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #a600c4;&quot;&gt;http://&amp;lt;Public IP&amp;gt;:9090&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1911&quot; data-origin-height=&quot;422&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/z8WfY/btrTQ0Ul2Ka/WyAgA4hFTT01x6lLjuEigK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/z8WfY/btrTQ0Ul2Ka/WyAgA4hFTT01x6lLjuEigK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/z8WfY/btrTQ0Ul2Ka/WyAgA4hFTT01x6lLjuEigK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fz8WfY%2FbtrTQ0Ul2Ka%2FWyAgA4hFTT01x6lLjuEigK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1911&quot; height=&quot;422&quot; data-origin-width=&quot;1911&quot; data-origin-height=&quot;422&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Others/DB Monitoring</category>
      <category>monitoring</category>
      <category>mysql</category>
      <category>promethues</category>
      <author>jeonghyun</author>
      <guid isPermaLink="true">https://jhdatabase.tistory.com/128</guid>
      <comments>https://jhdatabase.tistory.com/entry/Promethues-MySQL%EB%AA%A8%EB%8B%88%ED%84%B0%EB%A7%81-%EC%84%9C%EB%B2%84-%EC%84%A4%EC%B9%98-part-1#entry128comment</comments>
      <pubDate>Sun, 18 Dec 2022 16:25:08 +0900</pubDate>
    </item>
    <item>
      <title>[Redis - MySQL cache server 구성 테스트] use. python</title>
      <link>https://jhdatabase.tistory.com/entry/Redis-MySQL-cache-server-%EA%B5%AC%EC%84%B1-%ED%85%8C%EC%8A%A4%ED%8A%B8-use-python</link>
      <description>&lt;div&gt;&lt;b&gt;&lt;span&gt;Cache&lt;/span&gt;&lt;span&gt;란&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span style=&quot;color: #3d4144;&quot;&gt;캐시는 고속 저장소로 대용량 데이터, 복잡한 수학적 연산 결과, 정적 컨텐츠 등을 연산 없이 데이터를 불러올 수 있어 CPU 기능 부하와 지연 시간을 줄여줄 수 있고 퍼포먼스를 향상 시킬 수 있습니다. 보통 RAM이나 인메모리 엔진 같이 가볍고 빠른 하드웨어에 설치되어 실행됩니다.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #3d4144;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;&lt;span style=&quot;color: #3d4144;&quot;&gt;캐시 히트율(cache hit rate)은 요청이 들어왔을 때 캐싱된 데이터가 있는 확률로 들어온 전체 요청 수 대비 캐시가 히트돼서 응답한 개수를 나타냅니다. 캐시 히트율이 높다는 건 그만큼 캐싱 데이터가 쓰여서 성능이 높다는 걸 의미합니다. 하지만 무조건 높다는 게 좋은 건 아닙니다. RDB인 MySQL과 캐시 DB인 Redis는 실시간 싱크(synch)가 이뤄지지 않기에 즉각적인 데이터 반영이 필요한 경우 캐시 사용이 적합하지 않습니다.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #3d4144;&quot;&gt;Redis가 인기 있는 이유는 Java, Python, PHP, C, C++, C#, JavaScript, Node.js, Ruby, R, Go를 비롯한 정말 많은 프로그래밍 언어 프레임워크에 대한 API를 폭넓게 지원하기 떄문이다.&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;[Look aside Cache 쿼리 순서]&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #3d4144;&quot;&gt;1.클라이언트에서 데이터 요청&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #3d4144;&quot;&gt;2.서버에서 캐시에 데이터 존재 유무 확인&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #3d4144;&quot;&gt;3.데이터가 있다면 캐시의 데이터 사용 (빠른 조회)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #3d4144;&quot;&gt;4.데이터가 없다면 실제 DB 데이터에 접근&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #3d4144;&quot;&gt;5.그리고 DB에서 가져 온 데이터를 캐시에 저장하고 클라이언트에 반환&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;[write back 쿼리 순서]&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #3d4144;&quot;&gt;1.우선 모든 데이터를 캐시에 싹 저장&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #3d4144;&quot;&gt;2.캐시의 데이터를 일정 주기마다 DB에 한꺼번에 저장 (배치)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #3d4144;&quot;&gt;3.그리고나선 DB에 저장했으니 잔존 데이터를 캐시에서 제거&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #3d4144;&quot;&gt;단, 모든 사용자의 Timeline을 캐싱하게 되면 메모리가 부족해질 수 있으므로,&lt;/span&gt; &lt;u&gt;&lt;span style=&quot;color: #3d4144;&quot;&gt;로그인을 안한 지 30일이 지난 사용자의 Timeline은 Redis Cluster에서 삭제하도록 설정&lt;/span&gt;&lt;/u&gt;&lt;span style=&quot;color: #3d4144;&quot;&gt;한다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #3d4144;&quot;&gt;Redis Cluster에서 삭제된 사용자의 Timeline 정보는 해당 사용자가 다시 로그인을 할 시에 재생성 하게 하는데, 이때 데이터베이스에 직접 접근하는 과정이 필요하기에 시간이 다소 소요될 수도 있다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #3d4144;&quot;&gt;Redis는 특히 Remote Dictionary로서 RDBMS의 캐시 솔루션으로 용도로 사용합니다.&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;u&gt;&lt;span style=&quot;color: #3d4144;&quot;&gt;캐싱이 필요할 때 많이 사용되는데 즉시 메시지를 주고 받아야 될 때나, 장바구니의 삭제와 같은 경우에 많이 사용&lt;/span&gt;&lt;/u&gt;&lt;span style=&quot;color: #3d4144;&quot;&gt;하는 편이다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #3d4144;&quot;&gt;또한 RAM은 휘발성인데 그럼 실행중인 Redis를 끄면 데이터가 전부 날라간다고 생각이 들게 되는데, Redis는 in-memory 이지만 persistent on-disk 데이터베이스 이기도 하다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;u&gt;&lt;span style=&quot;color: #3d4144;&quot;&gt;Redis는 특정한 때에 현재까지의 in-memory 상태를 disk에 저장해 두었다가 Redis를 다시 시작했을 때 disk에 저장해 두었던 dump 파일들을 load 하기 때문에 데이터의 손실 발생을 방지&lt;/span&gt;&lt;/u&gt;&lt;span style=&quot;color: #3d4144;&quot;&gt;할수도 있다.&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;테스트 환경&lt;/b&gt;&lt;/blockquote&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #3d4144;&quot;&gt;Hostname&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #3d4144;&quot;&gt;IP&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #3d4144;&quot;&gt;Role&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;Version&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #3d4144;&quot;&gt;jh-redis&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #3d4144;&quot;&gt;192.168.100.86&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;redis server&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;redis-3.2.8&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;mysql&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #3d4144;&quot;&gt;192.168.100.85&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;mysql server&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #3d4144;&quot;&gt;8.0.28&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;&lt;span style=&quot;color: #3d4144;&quot;&gt;■ Redis 설치 (&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;redis server)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1671345829034&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@jh-redis ~]# yum -y install gcc-c++


[root@jh-redis ~]# wget http://download.redis.io/releases/redis-3.2.8.tar.gz

[root@jh-redis redis-3.2.8]# tar -zxvf redis-3.2.8.tar.gz

[root@jh-redis redis-3.2.8]# cd redis-3.2.8/

[root@jh-redis redis-3.2.8]# make &amp;amp;&amp;amp; make install

[root@jh-redis redis-3.2.8]# cd utils/



[root@jh-redis utils]# ./install_server.sh &amp;lt;enter&amp;gt;
Welcome to the redis service installer
This script will help you easily set up a running redis server

Please select the redis port for this instance: [6379]
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf]
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log]
Selected default - /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379]
Selected default - /var/lib/redis/6379
Please select the redis executable path [/usr/local/bin/redis-server]
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 =&amp;gt; /etc/init.d/redis_6379
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful!





## 패스워드 설정
[root@jh-redis ~]# vi /etc/redis/6379.conf
..
masterauth redis
requirepass redis


## 재기동
[root@jh-redis ~]# /etc/init.d/redis_6379 restart
Stopping ...
Redis stopped
Starting Redis server...



## 접속 확인
[root@jh-redis ~]# redis-cli
127.0.0.1:6379&amp;gt; auth redis
OK
127.0.0.1:6379&amp;gt; set name redis
OK
127.0.0.1:6379&amp;gt; get name
&quot;redis&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #3d4144;&quot;&gt;■ python 설치(3.x)&lt;/span&gt;&lt;span style=&quot;color: #3d4144;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;redis server)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1671345851775&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@jh-redis ~]# wget https://www.python.org/ftp/python/3.11.0/Python-3.11.0.tar.xz

[root@jh-redis ~]# tar -xvf Python-3.11.0.tar.xz

[root@jh-redis ~]# cd Python-3.11.0/

[root@jh-redis Python-3.11.0]# ./configure
...
checking for stdlib extension module _testbuffer... yes
checking for stdlib extension module _testimportmultiple... yes
checking for stdlib extension module _testmultiphase... yes
checking for stdlib extension module _xxtestfuzz... yes
checking for stdlib extension module _ctypes_test... yes
checking for stdlib extension module xxlimited... yes
checking for stdlib extension module xxlimited_35... yes
configure: creating ./config.status
config.status: creating Makefile.pre
config.status: creating Misc/python.pc
config.status: creating Misc/python-embed.pc
config.status: creating Misc/python-config.sh
config.status: creating Modules/Setup.bootstrap
config.status: creating Modules/Setup.stdlib
config.status: creating Modules/ld_so_aix
config.status: creating pyconfig.h
configure: creating Modules/Setup.local
configure: creating Makefile
configure:


[root@prometheus Python-3.11.0]# make &amp;amp;&amp;amp; make install


[root@prometheus Python-3.11.0]# python3.11 -V
Python 3.11.0&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span style=&quot;color: #3d4144;&quot;&gt;■ pip redis 모듈 설치&lt;/span&gt;&lt;span style=&quot;color: #3d4144;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;redis server)&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1671345866775&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@jh-redis Python-3.11.0]# pip3 install redis
WARNING: Running pip install with root privileges is generally not a good idea. Try `pip3 install --user` instead.
Collecting redis
  Downloading https://files.pythonhosted.org/packages/76/ad/dd7b6423295394b95e03d961d454e3046b569715dcc2dd4a030bb43a7cff/redis-4.3.5-py3-none-any.whl (248kB)
    100% |████████████████████████████████| 256kB 4.4MB/s
Collecting async-timeout&amp;gt;=4.0.2 (from redis)
  Downloading https://files.pythonhosted.org/packages/d6/c1/8991e7c5385b897b8c020cdaad718c5b087a6626d1d11a23e1ea87e325a7/async_timeout-4.0.2-py3-none-any.whl
Collecting typing-extensions; python_version &amp;lt; &quot;3.8&quot; (from redis)
  Downloading https://files.pythonhosted.org/packages/45/6b/44f7f8f1e110027cf88956b59f2fad776cca7e1704396d043f89effd3a0e/typing_extensions-4.1.1-py3-none-any.whl
Collecting packaging&amp;gt;=20.4 (from redis)
  Downloading https://files.pythonhosted.org/packages/05/8e/8de486cbd03baba4deef4142bd643a3e7bbe954a784dc1bb17142572d127/packaging-21.3-py3-none-any.whl (40kB)
    100% |████████████████████████████████| 40kB 5.5MB/s
Collecting importlib-metadata&amp;gt;=1.0; python_version &amp;lt; &quot;3.8&quot; (from redis)
  Downloading https://files.pythonhosted.org/packages/a0/a1/b153a0a4caf7a7e3f15c2cd56c7702e2cf3d89b1b359d1f1c5e59d68f4ce/importlib_metadata-4.8.3-py3-none-any.whl
Collecting pyparsing!=3.0.5,&amp;gt;=2.0.2 (from packaging&amp;gt;=20.4-&amp;gt;redis)
  Downloading https://files.pythonhosted.org/packages/6c/10/a7d0fa5baea8fe7b50f448ab742f26f52b80bfca85ac2be9d35cdd9a3246/pyparsing-3.0.9-py3-none-any.whl (98kB)
    100% |████████████████████████████████| 102kB 10.5MB/s
Collecting zipp&amp;gt;=0.5 (from importlib-metadata&amp;gt;=1.0; python_version &amp;lt; &quot;3.8&quot;-&amp;gt;redis)
  Downloading https://files.pythonhosted.org/packages/bd/df/d4a4974a3e3957fd1c1fa3082366d7fff6e428ddb55f074bf64876f8e8ad/zipp-3.6.0-py3-none-any.whl
Installing collected packages: typing-extensions, async-timeout, pyparsing, packaging, zipp, importlib-metadata, redis
Successfully installed async-timeout-4.0.2 importlib-metadata-4.8.3 packaging-21.3 pyparsing-3.0.9 redis-4.3.5 typing-extensions-4.1.1 zipp-3.6.0&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;&lt;span style=&quot;color: #3d4144;&quot;&gt;■ connect 테스트&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #3d4144;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;redis server)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;span style=&quot;color: #3d4144;&quot;&gt;redis 서버 IP와 패스워드 입력&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1671345881209&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@jh-redis Python-3.11.0]# vi redis_connect.py
import redis
r = redis.Redis(host=&quot;192.168.100.86&quot;, port=6379, password=&quot;redis&quot;,decode_responses=True)

print(r.ping())
print(r.set(name=&quot;name&quot;, value=&quot;redis&quot;))
print(r.get(name=&quot;name&quot;))



[root@jh-redis Python-3.11.0]# python3.6 redis_connect.py
True
True
redis&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #3d4144;&quot;&gt;■ MySQL 연동 테스트&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;Python 이용하여 MySQL서버와 연결 테스트&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;## 필요 모듈 설치&lt;/span&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1671345904859&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@jh-redis ~]# pip3 install pymysql
WARNING: Running pip install with root privileges is generally not a good idea. Try `pip3 install --user` instead.
Collecting pymysql
  Downloading https://files.pythonhosted.org/packages/4f/52/a115fe175028b058df353c5a3d5290b71514a83f67078a6482cff24d6137/PyMySQL-1.0.2-py3-none-any.whl (43kB)
    100% |████████████████████████████████| 51kB 8.5MB/s
Installing collected packages: pymysql
Successfully installed pymysql-1.0.2



[root@jh-redis ~]# pip3 install pandas
WARNING: Running pip install with root privileges is generally not a good idea. Try `pip3 install --user` instead.
Collecting pandas
  Downloading https://files.pythonhosted.org/packages/c3/e2/00cacecafbab071c787019f00ad84ca3185952f6bb9bca9550ed83870d4d/pandas-1.1.5-cp36-cp36m-manylinux1_x86_64.whl (9.5MB)
    100% |████████████████████████████████| 9.5MB 132kB/s
Collecting python-dateutil&amp;gt;=2.7.3 (from pandas)
  Downloading https://files.pythonhosted.org/packages/36/7a/87837f39d0296e723bb9b62bbb257d0355c7f6128853c78955f57342a56d/python_dateutil-2.8.2-py2.py3-none-any.whl (247kB)
    100% |████████████████████████████████| 256kB 4.9MB/s
Collecting numpy&amp;gt;=1.15.4 (from pandas)
  Downloading https://files.pythonhosted.org/packages/45/b2/6c7545bb7a38754d63048c7696804a0d947328125d81bf12beaa692c3ae3/numpy-1.19.5-cp36-cp36m-manylinux1_x86_64.whl (13.4MB)
    100% |████████████████████████████████| 13.4MB 94kB/s
Collecting pytz&amp;gt;=2017.2 (from pandas)
  Downloading https://files.pythonhosted.org/packages/85/ac/92f998fc52a70afd7f6b788142632afb27cd60c8c782d1452b7466603332/pytz-2022.6-py2.py3-none-any.whl (498kB)
    100% |████████████████████████████████| 501kB 2.8MB/s
Collecting six&amp;gt;=1.5 (from python-dateutil&amp;gt;=2.7.3-&amp;gt;pandas)
  Downloading https://files.pythonhosted.org/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl
Installing collected packages: six, python-dateutil, numpy, pytz, pandas
Successfully installed numpy-1.19.5 pandas-1.1.5 python-dateutil-2.8.2 pytz-2022.6 six-1.16.0




[root@jh-redis ~]# pip3 install openpyxl
WARNING: Running pip install with root privileges is generally not a good idea. Try `pip3 install --user` instead.
Collecting openpyxl
  Downloading https://files.pythonhosted.org/packages/7b/60/9afac4fd6feee0ac09339de4101ee452ea643d26e9ce44c7708a0023f503/openpyxl-3.0.10-py2.py3-none-any.whl (242kB)
    100% |████████████████████████████████| 245kB 4.8MB/s
Collecting et-xmlfile (from openpyxl)
  Downloading https://files.pythonhosted.org/packages/96/c2/3dd434b0108730014f1b96fd286040dc3bcb70066346f7e01ec2ac95865f/et_xmlfile-1.1.0-py3-none-any.whl
Installing collected packages: et-xmlfile, openpyxl
Successfully installed et-xmlfile-1.1.0 openpyxl-3.0.10




※ 사전에 DB 서버 유저 및 database, test테이블 생성
mysql&amp;gt; select user, host from mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| kim              | %         |
| prouser          | %         |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+
6 rows in set (0.00 sec)




## DB 연동 python
[root@jh-redis ~]# vi mysql.py

import pymysql
mysql_db = pymysql.connect(
    user=&quot;kim&quot;,
    passwd=&quot;kim&quot;,
    host=&quot;192.168.100.85&quot;,
    port=3306,
    db=&quot;kim&quot;,
)


cursor = mysql_db.cursor()
sql = &quot;select * from test;&quot;
cursor.execute(sql)
result = cursor.fetchall()

import pandas as pd

result = pd.DataFrame(result)
result
result.to_excel('test.xlsx')



## python 실행
[root@jh-redis ~]# python3.6 mysql.py&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;■ Cache test&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1671345920754&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@jh-redis ~]# vi test.py
import redis
import pymysql
import time


# 레디스 클라이언트를 만든다
# Redis&amp;lt;ConnectionPool&amp;lt;Connection&amp;gt;&amp;gt;
r = redis.Redis(host=&quot;localhost&quot;, port=6379, password=&quot;redis&quot;,decode_responses=True)

                
#pymysql로 mysql 연결
mysql_db = pymysql.connect(
    user=&quot;kim&quot;,
    passwd=&quot;kim&quot;,
    host=&quot;192.168.100.85&quot;,
    port=3306,
    db=&quot;sakila&quot;,
)


#여기부터 실제 로직
result_list = []
#id=int(input(&quot;emp_no 입력 (6자리)&quot;)) #직접입력귀찮아서;
for address_id in range(500,600):
    id=int(address_id)
    first_time = time.time()
    result = r.get(name=id)
    print(id)


    if not result:
        print(&quot;no cache&quot;)
        cursor = mysql_db.cursor()
        sql = '''select  address_id,address, district, city_id, location from address where address_id=%s'''
        cursor.execute(sql, (int(address_id)))
        result = cursor.fetchone()
        r.set(name=result[0], value=result[1])

    else:
        print(&quot;cache&quot;)

    result = r.get(name=id) #if문에 넣을수있지만 동일한 조건을 주기위함
    last_time = time.time()
    timetotime = last_time-first_time
    print(timetotime, &quot;Second&quot;)
    print(result)
    result_list.append(timetotime)


print(&quot;Finish&quot;)
print(sum(result_list)/len(result_list))&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;※ cache 없을 때&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1671345935631&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;## redis 키 값 확인
[root@jh-redis ~]# redis-cli
127.0.0.1:6379&amp;gt; auth redis
OK
127.0.0.1:6379&amp;gt; keys *
(empty list or set)


[root@jh-redis ~]# python3.6 test.py
500
no cache
0.0018432140350341797 Second
362 Rajkot Lane
501
no cache
0.0009305477142333984 Second
1060 Tandil Lane
502
no cache
0.0009379386901855469 Second
1515 Korla Way
503
no cache
0.0008525848388671875 Second
1416 San Juan Bautista Tuxtepec Avenue
504
no cache
0.0008611679077148438 Second
1 Valle de Santiago Avenue
505
no cache
0.0008366107940673828 Second
519 Brescia Parkway
506
no cache
0.0008485317230224609 Second
414 Mandaluyong Street
507
no cache
0.0008752346038818359 Second
1197 Sokoto Boulevard
508
no cache
0.0008466243743896484 Second
496 Celaya Drive
509
no cache
0.0007996559143066406 Second
786 Matsue Way
Finish
0.0009632110595703125&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt; ※ cache 있을 때&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1671345960667&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;## redis에 저장된 값 확인
127.0.0.1:6379&amp;gt; keys *
1) &quot;505&quot;
2) &quot;507&quot;
3) &quot;500&quot;
4) &quot;504&quot;
5) &quot;503&quot;
6) &quot;502&quot;
7) &quot;501&quot;
8) &quot;509&quot;
9) &quot;506&quot;
10) &quot;508&quot;




[root@jh-redis ~]# python3.6 test.py
500
cache
0.001024007797241211 Second
362 Rajkot Lane
501
cache
0.000213623046875 Second
1060 Tandil Lane
502
cache
0.00019288063049316406 Second
1515 Korla Way
503
cache
0.0001881122589111328 Second
1416 San Juan Bautista Tuxtepec Avenue
504
cache
0.00018835067749023438 Second
1 Valle de Santiago Avenue
505
cache
0.0002117156982421875 Second
519 Brescia Parkway
506
cache
0.00018715858459472656 Second
414 Mandaluyong Street
507
cache
0.00018739700317382812 Second
1197 Sokoto Boulevard
508
cache
0.000186920166015625 Second
496 Celaya Drive
509
cache
0.00018715858459472656 Second
786 Matsue Way
Finish
0.0002767324447631836&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ 속도 비교&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;약 4배정도 속도가 빠르다.&lt;br /&gt;## cache 없을때&amp;nbsp;0.0009632110595703125&lt;br /&gt;## cache에 있을때 0.0002767324447631836&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;a href=&quot;https://www.lostcatbox.com/2020/10/23/DB-cache-server/&quot;&gt;https://www.lostcatbox.com/2020/10/23/DB-cache-server/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1671346003817&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;DB-cache-server에 대해서 &amp;middot; lostcatbox&quot; data-og-description=&quot;Word count: 1.2kReading time: 7 min  2020/10/23   Share     &quot; data-og-host=&quot;www.lostcatbox.com&quot; data-og-source-url=&quot;https://www.lostcatbox.com/2020/10/23/DB-cache-server/&quot; data-og-url=&quot;https://www.lostcatbox.com/2020/10/23/DB-cache-server/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.lostcatbox.com/2020/10/23/DB-cache-server/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.lostcatbox.com/2020/10/23/DB-cache-server/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;DB-cache-server에 대해서 &amp;middot; lostcatbox&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Word count: 1.2kReading time: 7 min  2020/10/23   Share     &lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.lostcatbox.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;a href=&quot;https://yunhyeonglee.tistory.com/25&quot;&gt;https://yunhyeonglee.tistory.com/25&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1671346011237&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Redis] Redis Cache Server 만들기!&quot; data-og-description=&quot;아는 선배에게 많은 기업들이 현재 Redis를 이용해서 Cache Server를 사용하고 있다는 말을 듣게 되었다. 해서 이번에는 Redis를 이용한 Cache Server 구축에 관하여 포스팅을 해볼 생각이다. ■1.Cache 란? -&quot; data-og-host=&quot;yunhyeonglee.tistory.com&quot; data-og-source-url=&quot;https://yunhyeonglee.tistory.com/25&quot; data-og-url=&quot;https://yunhyeonglee.tistory.com/25&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/vVnIR/hyQUZbU9DR/Qqrr1k9VNNUioOf0a3Ii3k/img.jpg?width=360&amp;amp;height=195&amp;amp;face=0_0_360_195,https://scrap.kakaocdn.net/dn/eyev7/hyQUSDRNv1/l4szICutaVOzXMaF7C26I0/img.jpg?width=360&amp;amp;height=195&amp;amp;face=0_0_360_195,https://scrap.kakaocdn.net/dn/iqctt/hyQUYRC7I9/H6sGbHn4RlXr9UicHaQXBK/img.jpg?width=1080&amp;amp;height=1080&amp;amp;face=0_0_1080_1080&quot;&gt;&lt;a href=&quot;https://yunhyeonglee.tistory.com/25&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://yunhyeonglee.tistory.com/25&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/vVnIR/hyQUZbU9DR/Qqrr1k9VNNUioOf0a3Ii3k/img.jpg?width=360&amp;amp;height=195&amp;amp;face=0_0_360_195,https://scrap.kakaocdn.net/dn/eyev7/hyQUSDRNv1/l4szICutaVOzXMaF7C26I0/img.jpg?width=360&amp;amp;height=195&amp;amp;face=0_0_360_195,https://scrap.kakaocdn.net/dn/iqctt/hyQUYRC7I9/H6sGbHn4RlXr9UicHaQXBK/img.jpg?width=1080&amp;amp;height=1080&amp;amp;face=0_0_1080_1080');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[Redis] Redis Cache Server 만들기!&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;아는 선배에게 많은 기업들이 현재 Redis를 이용해서 Cache Server를 사용하고 있다는 말을 듣게 되었다. 해서 이번에는 Redis를 이용한 Cache Server 구축에 관하여 포스팅을 해볼 생각이다. ■1.Cache 란? -&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;yunhyeonglee.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;a href=&quot;https://inpa.tistory.com/entry/REDIS-%F0%9F%93%9A-%EA%B0%9C%EB%85%90-%EC%86%8C%EA%B0%9C-%EC%82%AC%EC%9A%A9%EC%B2%98-%EC%BA%90%EC%8B%9C-%EC%84%B8%EC%85%98-%ED%95%9C%EB%88%88%EC%97%90-%EC%8F%99-%EC%A0%95%EB%A6%AC&quot;&gt;https://inpa.tistory.com/entry/REDIS-%F0%9F%93%9A-%EA%B0%9C%EB%85%90-%EC%86%8C%EA%B0%9C-%EC%82%AC%EC%9A%A9%EC%B2%98-%EC%BA%90%EC%8B%9C-%EC%84%B8%EC%85%98-%ED%95%9C%EB%88%88%EC%97%90-%EC%8F%99-%EC%A0%95%EB%A6%AC&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1671346020197&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[REDIS]   레디스 소개 &amp;amp; 사용처 (캐시 / 세션) - 한눈에 쏙 정리&quot; data-og-description=&quot;Redis (Remote Dictionary Server) Redis는 Remote(원격)에 위치하고 프로세스로 존재하는 In-Memory 기반의 Dictionary(key-value) 구조 데이터 관리 Server 시스템이다. 여기서 key-value 구조 데이터란, mysql 같은 관계형 &quot; data-og-host=&quot;inpa.tistory.com&quot; data-og-source-url=&quot;https://inpa.tistory.com/entry/REDIS-%F0%9F%93%9A-%EA%B0%9C%EB%85%90-%EC%86%8C%EA%B0%9C-%EC%82%AC%EC%9A%A9%EC%B2%98-%EC%BA%90%EC%8B%9C-%EC%84%B8%EC%85%98-%ED%95%9C%EB%88%88%EC%97%90-%EC%8F%99-%EC%A0%95%EB%A6%AC&quot; data-og-url=&quot;https://inpa.tistory.com/entry/REDIS-%F0%9F%93%9A-%EA%B0%9C%EB%85%90-%EC%86%8C%EA%B0%9C-%EC%82%AC%EC%9A%A9%EC%B2%98-%EC%BA%90%EC%8B%9C-%EC%84%B8%EC%85%98-%ED%95%9C%EB%88%88%EC%97%90-%EC%8F%99-%EC%A0%95%EB%A6%AC&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bgeJhz/hyQWsXSoRk/OYSsQuFM3DoKwqMfvKglk0/img.jpg?width=800&amp;amp;height=400&amp;amp;face=0_0_800_400,https://scrap.kakaocdn.net/dn/n6Ley/hyQUZbU9Mk/DlrKZUyvqlysPuHgX84Nx0/img.jpg?width=800&amp;amp;height=400&amp;amp;face=0_0_800_400,https://scrap.kakaocdn.net/dn/sjhNv/hyQUVghYu9/3NzcPklNkpJ30pxepNrqyk/img.png?width=1430&amp;amp;height=603&amp;amp;face=0_0_1430_603&quot;&gt;&lt;a href=&quot;https://inpa.tistory.com/entry/REDIS-%F0%9F%93%9A-%EA%B0%9C%EB%85%90-%EC%86%8C%EA%B0%9C-%EC%82%AC%EC%9A%A9%EC%B2%98-%EC%BA%90%EC%8B%9C-%EC%84%B8%EC%85%98-%ED%95%9C%EB%88%88%EC%97%90-%EC%8F%99-%EC%A0%95%EB%A6%AC&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://inpa.tistory.com/entry/REDIS-%F0%9F%93%9A-%EA%B0%9C%EB%85%90-%EC%86%8C%EA%B0%9C-%EC%82%AC%EC%9A%A9%EC%B2%98-%EC%BA%90%EC%8B%9C-%EC%84%B8%EC%85%98-%ED%95%9C%EB%88%88%EC%97%90-%EC%8F%99-%EC%A0%95%EB%A6%AC&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bgeJhz/hyQWsXSoRk/OYSsQuFM3DoKwqMfvKglk0/img.jpg?width=800&amp;amp;height=400&amp;amp;face=0_0_800_400,https://scrap.kakaocdn.net/dn/n6Ley/hyQUZbU9Mk/DlrKZUyvqlysPuHgX84Nx0/img.jpg?width=800&amp;amp;height=400&amp;amp;face=0_0_800_400,https://scrap.kakaocdn.net/dn/sjhNv/hyQUVghYu9/3NzcPklNkpJ30pxepNrqyk/img.png?width=1430&amp;amp;height=603&amp;amp;face=0_0_1430_603');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[REDIS]   레디스 소개 &amp;amp; 사용처 (캐시 / 세션) - 한눈에 쏙 정리&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Redis (Remote Dictionary Server) Redis는 Remote(원격)에 위치하고 프로세스로 존재하는 In-Memory 기반의 Dictionary(key-value) 구조 데이터 관리 Server 시스템이다. 여기서 key-value 구조 데이터란, mysql 같은 관계형&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;inpa.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://daakludens.github.io/project/redis-cache/&quot;&gt;https://daakludens.github.io/project/redis-cache/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1671346026382&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;DB 부하 분산을 위한 캐시 적용&quot; data-og-description=&quot;redis, cache&quot; data-og-host=&quot;daakludens.github.io&quot; data-og-source-url=&quot;https://daakludens.github.io/project/redis-cache/&quot; data-og-url=&quot;https://daakludens.github.io/project/redis-cache/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/wjYDr/hyQWHOfNs4/Wt42P33mKFHGVdwzaKtiIK/img.jpg?width=651&amp;amp;height=400&amp;amp;face=0_0_651_400,https://scrap.kakaocdn.net/dn/DkIol/hyQUXLWu1l/UlqSZc7AV1SWwLM8uY88C1/img.jpg?width=651&amp;amp;height=400&amp;amp;face=0_0_651_400,https://scrap.kakaocdn.net/dn/CXEvC/hyQU5iUYVS/DCRCUKxUzLTVwNde1A88F0/img.jpg?width=651&amp;amp;height=400&amp;amp;face=0_0_651_400&quot;&gt;&lt;a href=&quot;https://daakludens.github.io/project/redis-cache/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://daakludens.github.io/project/redis-cache/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/wjYDr/hyQWHOfNs4/Wt42P33mKFHGVdwzaKtiIK/img.jpg?width=651&amp;amp;height=400&amp;amp;face=0_0_651_400,https://scrap.kakaocdn.net/dn/DkIol/hyQUXLWu1l/UlqSZc7AV1SWwLM8uY88C1/img.jpg?width=651&amp;amp;height=400&amp;amp;face=0_0_651_400,https://scrap.kakaocdn.net/dn/CXEvC/hyQU5iUYVS/DCRCUKxUzLTVwNde1A88F0/img.jpg?width=651&amp;amp;height=400&amp;amp;face=0_0_651_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;DB 부하 분산을 위한 캐시 적용&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;redis, cache&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;daakludens.github.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>Others/Opensource Tool</category>
      <category>mysql</category>
      <category>Python</category>
      <category>Redis</category>
      <category>redis cache</category>
      <author>jeonghyun</author>
      <guid isPermaLink="true">https://jhdatabase.tistory.com/127</guid>
      <comments>https://jhdatabase.tistory.com/entry/Redis-MySQL-cache-server-%EA%B5%AC%EC%84%B1-%ED%85%8C%EC%8A%A4%ED%8A%B8-use-python#entry127comment</comments>
      <pubDate>Sun, 18 Dec 2022 15:48:03 +0900</pubDate>
    </item>
    <item>
      <title>[Apache Jmeter - 설치 및 설정 for 부하 테스트]</title>
      <link>https://jhdatabase.tistory.com/entry/Apache-Jmeter-%EC%84%A4%EC%B9%98-%EB%B0%8F-%EC%84%A4%EC%A0%95-for-%EB%B6%80%ED%95%98-%ED%85%8C%EC%8A%A4%ED%8A%B8</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트 진행 중 DB 성능 테스트를 할 일이 생겨서 회사 사수님의 가르침으로 Jmeter툴을 사용해 테스트 진행했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ JMeter 파일 다운로드&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;JMeter Download URL : &lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://jmeter.apache.org/download_jmeter.cgi&quot;&gt;https://jmeter.apache.org/download_jmeter.cgi&lt;/a&gt;&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1669890063828&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Apache JMeter
          -
          Download Apache JMeter&quot; data-og-description=&quot;Download Apache JMeter We recommend you use a mirror to download our release builds, but you must verify the integrity of the downloaded files using signatures downloaded from our main distribution directories. Recent releases (48 hours) may not yet be ava&quot; data-og-host=&quot;jmeter.apache.org&quot; data-og-source-url=&quot;https://jmeter.apache.org/download_jmeter.cgi&quot; data-og-url=&quot;https://jmeter.apache.org/download_jmeter.cgi&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://jmeter.apache.org/download_jmeter.cgi&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://jmeter.apache.org/download_jmeter.cgi&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Apache JMeter - Download Apache JMeter&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Download Apache JMeter We recommend you use a mirror to download our release builds, but you must verify the integrity of the downloaded files using signatures downloaded from our main distribution directories. Recent releases (48 hours) may not yet be ava&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;jmeter.apache.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1358&quot; data-origin-height=&quot;889&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zH4Ew/btrSDdTk2WA/7vdFbH0ZnATzijGE3Fr8Nk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zH4Ew/btrSDdTk2WA/7vdFbH0ZnATzijGE3Fr8Nk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zH4Ew/btrSDdTk2WA/7vdFbH0ZnATzijGE3Fr8Nk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzH4Ew%2FbtrSDdTk2WA%2F7vdFbH0ZnATzijGE3Fr8Nk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1358&quot; height=&quot;889&quot; data-origin-width=&quot;1358&quot; data-origin-height=&quot;889&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ Java 설치&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;JAVA Download URL : &lt;/span&gt;&lt;/b&gt;&lt;a style=&quot;letter-spacing: 0px;&quot; href=&quot;https://www.oracle.com/java/technologies/downloads/#jdk19-windows&quot;&gt;https://www.oracle.com/java/technologies/downloads/#jdk19-windows&lt;/a&gt;
&lt;figure id=&quot;og_1669890100605&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Download the Latest Java LTS Free&quot; data-og-description=&quot;Subscribe to Java SE and get the most comprehensive Java support available, with 24/7 global access to the experts.&quot; data-og-host=&quot;www.oracle.com&quot; data-og-source-url=&quot;https://www.oracle.com/java/technologies/downloads/#jdk19-windows&quot; data-og-url=&quot;https://www.oracle.com/java/technologies/downloads/#jdk19-windows&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/iN9Un/hyQKWFM4SV/BEVasAFG4iQTXkDTMzUoAK/img.jpg?width=1200&amp;amp;height=628&amp;amp;face=0_0_1200_628,https://scrap.kakaocdn.net/dn/fET6M/hyQK2lFWE5/liUkEnbW0qqbG6QVRhleKk/img.jpg?width=1200&amp;amp;height=1200&amp;amp;face=0_0_1200_1200&quot;&gt;&lt;a href=&quot;https://www.oracle.com/java/technologies/downloads/#jdk19-windows&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.oracle.com/java/technologies/downloads/#jdk19-windows&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/iN9Un/hyQKWFM4SV/BEVasAFG4iQTXkDTMzUoAK/img.jpg?width=1200&amp;amp;height=628&amp;amp;face=0_0_1200_628,https://scrap.kakaocdn.net/dn/fET6M/hyQK2lFWE5/liUkEnbW0qqbG6QVRhleKk/img.jpg?width=1200&amp;amp;height=1200&amp;amp;face=0_0_1200_1200');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Download the Latest Java LTS Free&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Subscribe to Java SE and get the most comprehensive Java support available, with 24/7 global access to the experts.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.oracle.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Jmeter를 사용하기 앞서 JAVA를 미리 설치해야합니다. 각 OS에 맞게 설치 진행 해주시면 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1281&quot; data-origin-height=&quot;797&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhJ1hH/btrSyqmC4IQ/reRVVDfsnFf1ca7GDuGNzk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhJ1hH/btrSyqmC4IQ/reRVVDfsnFf1ca7GDuGNzk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhJ1hH/btrSyqmC4IQ/reRVVDfsnFf1ca7GDuGNzk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhJ1hH%2FbtrSyqmC4IQ%2FreRVVDfsnFf1ca7GDuGNzk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1281&quot; height=&quot;797&quot; data-origin-width=&quot;1281&quot; data-origin-height=&quot;797&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■&lt;/span&gt; &lt;span&gt;apache-jmeter-5.5\bin&amp;nbsp;&lt;/span&gt;&lt;span&gt;하위 경로에 있는 jmeter.bat 실행&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1348&quot; data-origin-height=&quot;708&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7J74z/btrSDGgFKs1/phUCudzWW6PDkhnKdTi201/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7J74z/btrSDGgFKs1/phUCudzWW6PDkhnKdTi201/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7J74z/btrSDGgFKs1/phUCudzWW6PDkhnKdTi201/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7J74z%2FbtrSDGgFKs1%2FphUCudzWW6PDkhnKdTi201%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1348&quot; height=&quot;708&quot; data-origin-width=&quot;1348&quot; data-origin-height=&quot;708&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ Jar 파일 다운로드&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;Plugin manager jar Download URL : &lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;/span&gt;&lt;a style=&quot;letter-spacing: 0px;&quot; href=&quot;https://jmeter-plugins.org/wiki/PluginsManager/&quot;&gt;https://jmeter-plugins.org/wiki/PluginsManager/&lt;/a&gt;
&lt;figure id=&quot;og_1669890236686&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Documentation
         :: JMeter-Plugins.org&quot; data-og-description=&quot;JMeter Plugins Manager The idea of JMeter Plugins Manager is simple: instead of installing various plugins manually, it will do it for you through nice UI. No need to mess with JARs anymore. Install Plugins Manager once and it will do it all for you: insta&quot; data-og-host=&quot;jmeter-plugins.org&quot; data-og-source-url=&quot;https://jmeter-plugins.org/wiki/PluginsManager/&quot; data-og-url=&quot;https://jmeter-plugins.org/wiki/PluginsManager/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://jmeter-plugins.org/wiki/PluginsManager/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://jmeter-plugins.org/wiki/PluginsManager/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Documentation :: JMeter-Plugins.org&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;JMeter Plugins Manager The idea of JMeter Plugins Manager is simple: instead of installing various plugins manually, it will do it for you through nice UI. No need to mess with JARs anymore. Install Plugins Manager once and it will do it all for you: insta&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;jmeter-plugins.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;863&quot; data-origin-height=&quot;906&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cZonIp/btrSCLisZ0J/5qmUKAc56ulU6xKqY0VPh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cZonIp/btrSCLisZ0J/5qmUKAc56ulU6xKqY0VPh0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cZonIp/btrSCLisZ0J/5qmUKAc56ulU6xKqY0VPh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcZonIp%2FbtrSCLisZ0J%2F5qmUKAc56ulU6xKqY0VPh0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;863&quot; height=&quot;906&quot; data-origin-width=&quot;863&quot; data-origin-height=&quot;906&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ MySQL Connector Download&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;Connector &lt;b&gt;&lt;span&gt;Download URL : &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;a style=&quot;letter-spacing: 0px;&quot; href=&quot;https://jar-download.com/artifacts/mysql/mysql-connector-java?p=2&quot;&gt;https://jar-download.com/artifacts/mysql/mysql-connector-java?p=2&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1669890299044&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Download mysql JAR files with all dependencies&quot; data-og-description=&quot;mysql mysql-connector-java 5.1.49 compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.49' //Thanks for using https://jar-download.com libraryDependencies += &amp;quot;mysql&amp;quot; % &amp;quot;mysql-connector-java&amp;quot; % &amp;quot;5.1.49&amp;quot; //Thanks for using https://jar-download&quot; data-og-host=&quot;jar-download.com&quot; data-og-source-url=&quot;https://jar-download.com/artifacts/mysql/mysql-connector-java?p=2&quot; data-og-url=&quot;https://jar-download.com/artifacts/mysql/mysql-connector-java?p=2&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://jar-download.com/artifacts/mysql/mysql-connector-java?p=2&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://jar-download.com/artifacts/mysql/mysql-connector-java?p=2&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Download mysql JAR files with all dependencies&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;mysql mysql-connector-java 5.1.49 compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.49' //Thanks for using https://jar-download.com libraryDependencies += &quot;mysql&quot; % &quot;mysql-connector-java&quot; % &quot;5.1.49&quot; //Thanks for using https://jar-download&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;jar-download.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;DB version에 맞춰 다운로드 후&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1047&quot; data-origin-height=&quot;842&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mpXkD/btrSDKpQ7HR/HyVCZDgzGbGMXJ6e95HyH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mpXkD/btrSDKpQ7HR/HyVCZDgzGbGMXJ6e95HyH1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mpXkD/btrSDKpQ7HR/HyVCZDgzGbGMXJ6e95HyH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmpXkD%2FbtrSDKpQ7HR%2FHyVCZDgzGbGMXJ6e95HyH1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1047&quot; height=&quot;842&quot; data-origin-width=&quot;1047&quot; data-origin-height=&quot;842&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ jar파일 copy&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;다운로드한 jar파일을&amp;nbsp;apache-jmeter-5.5\lib\ext 경로로 copy해준뒤 jmeter 재시작해줍니다.&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;plugin manager + mysqlconnector 모두 옮겨 줍니다&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1348&quot; data-origin-height=&quot;708&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bI4kIh/btrSCKYap47/1nADYD6jXkGLTZ2lGEQ4QK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bI4kIh/btrSCKYap47/1nADYD6jXkGLTZ2lGEQ4QK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bI4kIh/btrSCKYap47/1nADYD6jXkGLTZ2lGEQ4QK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbI4kIh%2FbtrSCKYap47%2F1nADYD6jXkGLTZ2lGEQ4QK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1348&quot; height=&quot;708&quot; data-origin-width=&quot;1348&quot; data-origin-height=&quot;708&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ Options -&amp;gt; Plugins Manager 클릭&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;Available Plugins에서 3 Basic Graphs &amp;amp; Custom Thread Groups 선택 후&amp;nbsp;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;Apply Changes and Restart JMeter 클릭&lt;/b&gt;&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1010&quot; data-origin-height=&quot;761&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oGeL0/btrSCHtCq61/kCWHI0diZf02KfTkSJkKwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oGeL0/btrSCHtCq61/kCWHI0diZf02KfTkSJkKwK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oGeL0/btrSCHtCq61/kCWHI0diZf02KfTkSJkKwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoGeL0%2FbtrSCHtCq61%2FkCWHI0diZf02KfTkSJkKwK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1010&quot; height=&quot;761&quot; data-origin-width=&quot;1010&quot; data-origin-height=&quot;761&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ Jmeter 설정&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;Template 설정&lt;/span&gt; : File -&amp;gt; Template 클릭 -&amp;gt; 상단의 select바에서 스크롤 내린 후 JDB Load Test 클릭 -&amp;gt; Create&lt;/div&gt;
&lt;div&gt;Test Plan 우클릭 -&amp;gt; Add -&amp;gt; config Element -&amp;gt; JDBC Connection Configuration&amp;nbsp;클릭&lt;/div&gt;
&lt;div&gt;Test Plan 우클릭 -&amp;gt; Add -&amp;gt; Threads(Users) -&amp;gt; Thread Group 클릭&lt;/div&gt;
&lt;div&gt;JDBC Request(Thread Group아래 클릭시 나옴)우클릭 -&amp;gt; Add -&amp;gt; Listener -&amp;gt; Summary Report 클릭&lt;/div&gt;
&lt;div&gt;Thread Group 우클릭 -&amp;gt; Add -&amp;gt; Listener -&amp;gt; View Tree 클릭&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1522&quot; data-origin-height=&quot;857&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Tny7g/btrSEd6pBdw/uTQWv7v3KB0866fqJwW3Tk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Tny7g/btrSEd6pBdw/uTQWv7v3KB0866fqJwW3Tk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Tny7g/btrSEd6pBdw/uTQWv7v3KB0866fqJwW3Tk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTny7g%2FbtrSEd6pBdw%2FuTQWv7v3KB0866fqJwW3Tk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1522&quot; height=&quot;857&quot; data-origin-width=&quot;1522&quot; data-origin-height=&quot;857&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ Connector 설정&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Variable Name for created pool -&amp;gt; DB이름&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1117&quot; data-origin-height=&quot;629&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beOGtk/btrSCrR7jD3/qyKpngyWtW84Mejgd82t11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beOGtk/btrSCrR7jD3/qyKpngyWtW84Mejgd82t11/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beOGtk/btrSCrR7jD3/qyKpngyWtW84Mejgd82t11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeOGtk%2FbtrSCrR7jD3%2FqyKpngyWtW84Mejgd82t11%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1117&quot; height=&quot;629&quot; data-origin-width=&quot;1117&quot; data-origin-height=&quot;629&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■&amp;nbsp;Thread Group 설정&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;쓰레드 그룹은 부하를 줄 양과 빈도를 설정&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1522&quot; data-origin-height=&quot;857&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VqGek/btrSy7txYBH/vMBHoKXWeugenH7pBgBav0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VqGek/btrSy7txYBH/vMBHoKXWeugenH7pBgBav0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VqGek/btrSy7txYBH/vMBHoKXWeugenH7pBgBav0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVqGek%2FbtrSy7txYBH%2FvMBHoKXWeugenH7pBgBav0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1522&quot; height=&quot;857&quot; data-origin-width=&quot;1522&quot; data-origin-height=&quot;857&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ JDBC Request 설정&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;테스트할 SQL쿼리문 작성&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1522&quot; data-origin-height=&quot;857&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/opgH8/btrSz7myFTO/qXgsQDAU4WhFPhNzxgiGx0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/opgH8/btrSz7myFTO/qXgsQDAU4WhFPhNzxgiGx0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/opgH8/btrSz7myFTO/qXgsQDAU4WhFPhNzxgiGx0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FopgH8%2FbtrSz7myFTO%2FqXgsQDAU4WhFPhNzxgiGx0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1522&quot; height=&quot;857&quot; data-origin-width=&quot;1522&quot; data-origin-height=&quot;857&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ 실행&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;File -&amp;gt; save (Ctrl + S) 이후 상단의 초록색 버튼 클릭하여 실행&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;&lt;/span&gt;&lt;/b&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1522&quot; data-origin-height=&quot;857&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8uREr/btrSAwUcZ5l/46WKLKzHcjlyqxevKr8Ik0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8uREr/btrSAwUcZ5l/46WKLKzHcjlyqxevKr8Ik0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8uREr/btrSAwUcZ5l/46WKLKzHcjlyqxevKr8Ik0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8uREr%2FbtrSAwUcZ5l%2F46WKLKzHcjlyqxevKr8Ik0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1522&quot; height=&quot;857&quot; data-origin-width=&quot;1522&quot; data-origin-height=&quot;857&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 쿼리별 , thread별 부하를 임의로 주어 DB성능 테스트를 진행하였습니다.&lt;/p&gt;</description>
      <category>Others/Opensource Tool</category>
      <category>Jmeter</category>
      <category>MariaDB</category>
      <category>성능테스트</category>
      <author>jeonghyun</author>
      <guid isPermaLink="true">https://jhdatabase.tistory.com/126</guid>
      <comments>https://jhdatabase.tistory.com/entry/Apache-Jmeter-%EC%84%A4%EC%B9%98-%EB%B0%8F-%EC%84%A4%EC%A0%95-for-%EB%B6%80%ED%95%98-%ED%85%8C%EC%8A%A4%ED%8A%B8#entry126comment</comments>
      <pubDate>Thu, 1 Dec 2022 19:44:09 +0900</pubDate>
    </item>
    <item>
      <title>[OCI - ATP to Oracle DBLink]</title>
      <link>https://jhdatabase.tistory.com/entry/OCI-ATP-to-Oracle-DBLink</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;OCI의 ATP 서비스와 일반 VM 또는 on-prem의 Oracle DB와 DBlink를 생성하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ATP 특성상 OS 접근이 안되기 때문에 일반적으로 생성하는 DBlink와는 방법이 조금 다릅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ Wallet용 디렉토리 생성 (target&amp;nbsp; DB)&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1669888019795&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@target-oracle ~]# mkdir -p /u01/server/wallet
[root@target-oracle ~]# mkdir -p /u01/client/wallet
[root@target-oracle ~]# mkdir /u01/certificate

[root@target-oracle ~]# chown -R oracle.oinstall /u01/server
[root@target-oracle ~]# chown -R oracle.oinstall /u01/client/
[root@target-oracle ~]# chown -R oracle.oinstall /u01/certificate/&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ TCP인증(SSL인증) 활성화&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;(target&amp;nbsp; DB)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;## 서버 wallet 생성&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1669888055472&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@target-oracle ~]# su - oracle

[oracle@target-oracle ~]$ cd /u01/server/wallet/


## 서버 wallet 생성
[oracle@target-oracle wallet]$ orapki wallet create -wallet ./ -pwd Kim123456 -auto_login
Oracle PKI Tool : Version 11.2.0.4.0 - Production
Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved.


[oracle@target-oracle wallet]$ orapki wallet add -wallet ./ -pwd Kim123456 -dn &quot;CN=dbcs&quot; -keysize 1024 -self_signed -validity 3650 -sign_alg sha256
Oracle PKI Tool : Version 11.2.0.4.0 - Production
Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;## 클라이언트 wallet 생성&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1669888074983&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[oracle@target-oracle wallet]$ cd /u01/client/wallet/

[oracle@target-oracle wallet]$ orapki wallet create -wallet ./ -pwd Kim123456 -auto_login


[oracle@target-oracle wallet]$ orapki wallet add -wallet ./ -pwd  Kim123456 -dn &quot;CN=client&quot; -keysize 1024 -self_signed -validity 3650 -sign_alg sha256
Oracle PKI Tool : Version 11.2.0.4.0 - Production
Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ 인증서 교환&amp;nbsp;&lt;/span&gt;&lt;span&gt;(target&amp;nbsp; DB)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;1. 서버 및 클라이언트 인증서 export&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1669888097165&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;## 서버
[oracle@target-oracle ~]$ cd /u01/server/wallet/

[oracle@target-oracle wallet]$ orapki wallet export -wallet ./ -pwd Kim123456 -dn &quot;CN=dbcs&quot; -cert /tmp/server.crt
Oracle PKI Tool : Version 11.2.0.4.0 - Production
Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved.



## 클라이언트
[oracle@target-oracle wallet]$ cd /u01/client/wallet/

[oracle@target-oracle wallet]$ orapki wallet export -wallet ./ -pwd Kim123456 -dn &quot;CN=client&quot; -cert /tmp/client.crt
Oracle PKI Tool : Version 11.2.0.4.0 - Production
Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;2.서버의 wallet에 클라이언트 인증서 &amp;amp; 클라이언트 wallet에 서버 인증서 각 추가&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1669888115208&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[oracle@target-oracle wallet]$ cd /u01/server/wallet/

[oracle@target-oracle wallet]$  orapki wallet add -wallet ./ -pwd Kim123456 -trusted_cert -cert /tmp/client.crt
Oracle PKI Tool : Version 11.2.0.4.0 - Production
Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved.


[oracle@target-oracle wallet]$ cd /u01/client/wallet/

[oracle@target-oracle wallet]$ orapki wallet add -wallet ./ -pwd Kim123456 -trusted_cert -cert /tmp/server.crt
Oracle PKI Tool : Version 11.2.0.4.0 - Production
Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;3.인증서 확인 및 서버 wallet 권한 변경&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1669888138288&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[oracle@target-oracle wallet]$ orapki wallet display -wallet .
Oracle PKI Tool : Version 11.2.0.4.0 - Production
Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved.

Requested Certificates:
User Certificates:
Subject:        CN=client
Trusted Certificates:
Subject:        OU=Class 2 Public Primary Certification Authority,O=VeriSign\, Inc.,C=US
Subject:        CN=client
Subject:        OU=Secure Server Certification Authority,O=RSA Data Security\, Inc.,C=US
Subject:        CN=GTE CyberTrust Global Root,OU=GTE CyberTrust Solutions\, Inc.,O=GTE Corporation,C=US
Subject:        CN=dbcs
Subject:        OU=Class 3 Public Primary Certification Authority,O=VeriSign\, Inc.,C=US
Subject:        OU=Class 1 Public Primary Certification Authority,O=VeriSign\, Inc.,C=US


[oracle@target-oracle wallet]$  cd /u01/server/wallet
[oracle@target-oracle wallet]$  chmod 640 cwallet.sso&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ wallet directory 추가 설정&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;(target&amp;nbsp; DB)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;1.Listener.ora에 wallet directory 추가&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1669888234724&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@target-oracle ~]# su - grid

[grid@target-oracle admin]$ vi $ORACLE_HOME/network/admin/listener.ora

[grid@target-oracle admin]$ vi listener.ora

WALLET_LOCATION =
  (SOURCE =
    (METHOD = FILE)
    (METHOD_DATA =
      (DIRECTORY = /u01/app/server/wallet)
    )
  )


LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = asis-oracle)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCPS)(HOST = asis-oracle)(PORT = 2484))
    )
  )&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;2.sqlnet.ora에 wallet directory 추가&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1669888423720&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@target-oracle ~]# su - oracle

[root@target-oracle ~]# vi $ORACLE_HOME/network/admin/sqlnet.ora
WALLET_LOCATION =
   (SOURCE =
     (METHOD = FILE)
     (METHOD_DATA =
       (DIRECTORY = /u01/app/server/wallet)
     )
   )&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ TCPS접속 사용 2484번 포트 해제&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;(target&amp;nbsp; DB)&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1669888442958&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@target-oracle sysconfig]# yum -y install iptables-services


[root@target-oracle ~]# vi /etc/sysconfig/iptables

# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports/services to this default configuration
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A INPUT -p tcp -m state --state NEW -m tcp --dport 2484 -j ACCEPT
COMMIT
~                                                                    


[root@target-oracle ~]# systemctl restart iptables&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ TCP endpoint 추가 (target DB)&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1669888491984&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;## 리스너 구성 변경
$ sudo su - grid
$ srvctl modify listener -p &quot;TCPS:1522/TCP:1521&quot;
$ srvctl stop listener
$ srvctl start listener


## DB 재기동
$ sudo su - oracle
$ srvctl stop database -database dbcs01_xxxxxx
$ srvctl start database -database dbcs01_xxxxxx


## 리스너 상태 확인
$ sudo su - grid
$ lsnrctl status&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ target DB wallet을 ATP에 전달(object storage 업로드)&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1669888516090&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@target-oracle ~]# su - oracle

[oracle@target-oracle ~]$ cp /u01/client/wallet/cwallet.sso  /tmp/.
[oracle@target-oracle ~]$ chmod 604 /tmp/cwallet.sso&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ 오브젝트 스토리지에&lt;/span&gt; &lt;span&gt;cwallet.sso&amp;nbsp;&lt;/span&gt;&lt;span&gt;업로드 (ATP)&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1916&quot; data-origin-height=&quot;898&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dCwVxY/btrSyqmAbwH/cD0vKfYCaExfo1Z1k3kcF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dCwVxY/btrSyqmAbwH/cD0vKfYCaExfo1Z1k3kcF0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dCwVxY/btrSyqmAbwH/cD0vKfYCaExfo1Z1k3kcF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdCwVxY%2FbtrSyqmAbwH%2FcD0vKfYCaExfo1Z1k3kcF0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1916&quot; height=&quot;898&quot; data-origin-width=&quot;1916&quot; data-origin-height=&quot;898&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ 사용자 공개 키 생성&amp;nbsp;&lt;/span&gt;&lt;span&gt;(ATP)&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1896&quot; data-origin-height=&quot;896&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WhZbD/btrSCFP3cl9/KYFYUiEm2vqoG1dhh6RJh1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WhZbD/btrSCFP3cl9/KYFYUiEm2vqoG1dhh6RJh1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WhZbD/btrSCFP3cl9/KYFYUiEm2vqoG1dhh6RJh1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWhZbD%2FbtrSCFP3cl9%2FKYFYUiEm2vqoG1dhh6RJh1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1896&quot; height=&quot;896&quot; data-origin-width=&quot;1896&quot; data-origin-height=&quot;896&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ API 서명 키 생성 (target DB)&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1669888655824&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@target-oracle ~]# mkdir -p /home/opc/TESTKEY

[root@target-oracle ~]# openssl genrsa -out /home/opc/TESTKEY/oci_api_key.pem 2048
Generating RSA private key, 2048 bit long modulus
..............+++
..........................+++
e is 65537 (0x10001)


[root@target-oracle ~]# chmod go-rwx /home/opc/TESTKEY/oci_api_key.pem


[root@target-oracle TESTKEY]# mkdir -p /root/oci


[root@target-oracle TESTKEY]# openssl rsa -pubout -in /home/opc/TESTKEY/oci_api_key.pem -out /root/oci/oci_api_key_public.pem
writing RSA key




[root@target-oracle ~]# openssl rsa -pubout -outform DER -in /home/opc/TESTKEY/oci_api_key.pem | openssl md5 -c
writing RSA key
(stdin)= 3c:89:00:fd:d5:e5:e0:dc:0e:1a:4e:c0:f9:d5:1b:6e




[root@target-oracle TESTKEY]# cd /root/oci/


[root@target-oracle oci]# ll
total 4
-rw-r--r-- 1 root root 451 Oct 11 11:29 oci_api_key_public.pem


[root@target-oracle oci]# vi oci_api_key_public.pem

-----BEGIN PUBLIC KEY-----
************************************
************************************
-----END PUBLIC KEY-----&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ 사용자 생성&amp;nbsp;&lt;/span&gt;&lt;span&gt;(ATP)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;메뉴 -&amp;gt; ID -&amp;gt; 사용자 -&amp;gt; 사용자 생성&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1413&quot; data-origin-height=&quot;834&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c2hPVB/btrSBC7Bpu4/RKcKfjyOrAwms11CiiQrIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c2hPVB/btrSBC7Bpu4/RKcKfjyOrAwms11CiiQrIk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c2hPVB/btrSBC7Bpu4/RKcKfjyOrAwms11CiiQrIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc2hPVB%2FbtrSBC7Bpu4%2FRKcKfjyOrAwms11CiiQrIk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1413&quot; height=&quot;834&quot; data-origin-width=&quot;1413&quot; data-origin-height=&quot;834&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;b&gt;&lt;span&gt;■&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;span&gt;암호 키 생성&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1580&quot; data-origin-height=&quot;799&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zLvW3/btrSDdMwEnD/y0G8Ck4PAnBDJUgim1ngg0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zLvW3/btrSDdMwEnD/y0G8Ck4PAnBDJUgim1ngg0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zLvW3/btrSDdMwEnD/y0G8Ck4PAnBDJUgim1ngg0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzLvW3%2FbtrSDdMwEnD%2Fy0G8Ck4PAnBDJUgim1ngg0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1580&quot; height=&quot;799&quot; data-origin-width=&quot;1580&quot; data-origin-height=&quot;799&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;■ &lt;b&gt;데이터베이스 연결 후 자격 증명 생성&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;private_key : 고객 암호 키&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1669888760430&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;BEGIN
DBMS_CLOUD.CREATE_CREDENTIAL (
credential_name =&amp;gt; 'OCI_KEY_CRED',
user_ocid =&amp;gt; '***',
tenancy_ocid =&amp;gt; '***',
private_key =&amp;gt; '***',
fingerprint =&amp;gt; '3***');
END;
/&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■&amp;nbsp;&lt;/span&gt;&lt;span&gt;oracleidentitycloudservice/kim 유저의 토큰(비밀번호) 생성&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1478&quot; data-origin-height=&quot;891&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/npRPm/btrSCv7ZWkx/arudKPcOreJAl1f1zuif9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/npRPm/btrSCv7ZWkx/arudKPcOreJAl1f1zuif9k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/npRPm/btrSCv7ZWkx/arudKPcOreJAl1f1zuif9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnpRPm%2FbtrSCv7ZWkx%2FarudKPcOreJAl1f1zuif9k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1478&quot; height=&quot;891&quot; data-origin-width=&quot;1478&quot; data-origin-height=&quot;891&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ wallet 설정 (ATP)&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1669888792830&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;## wallet 설정을 위한 디렉토리 생성
CREATE DIRECTORY dblink_wallet_dir_dbcs AS 'walletdir';


## 자격증명 등록 (target db에 생성한 kim유저로 지정)
BEGIN
DBMS_CLOUD.CREATE_CREDENTIAL(
credential_name =&amp;gt; 'kim',
username =&amp;gt; 'oracleidentitycloudservice/kim',
password =&amp;gt; '');
END;
/



## 오브젝트 스토리지에 업로드된 wallet을 dierctory object에 배치
BEGIN
  DBMS_CLOUD.GET_OBJECT(
    credential_name =&amp;gt; 'kkk',
    object_uri =&amp;gt; '/cwallet.sso',
    directory_name =&amp;gt; 'dblink_wallet_dir_dbcs');
END;
/&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;## 배치된 wallet 확인&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;788&quot; data-origin-height=&quot;215&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EJjpw/btrSB3YdIXa/6E5rHg6W1y1TxN1K1akPS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EJjpw/btrSB3YdIXa/6E5rHg6W1y1TxN1K1akPS1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EJjpw/btrSB3YdIXa/6E5rHg6W1y1TxN1K1akPS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEJjpw%2FbtrSB3YdIXa%2F6E5rHg6W1y1TxN1K1akPS1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;788&quot; height=&quot;215&quot; data-origin-width=&quot;788&quot; data-origin-height=&quot;215&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ DB Link 생성 (ATP)&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1669888877053&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;BEGIN
     DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK(
          db_link_name =&amp;gt; 'TODAY',
          hostname =&amp;gt; '',
          port =&amp;gt; '',
          service_name =&amp;gt; 'orcl',
          ssl_server_cert_dn =&amp;gt; 'CN=asis-oracle',
          credential_name =&amp;gt; 'DBCS_DB_LINK_CRED',
          directory_name =&amp;gt; 'dblink_wallet_dir_dbcs');
END;
/&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ DB link 생성 확인&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1587&quot; data-origin-height=&quot;212&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ofYjb/btrSB3cRmrf/R6kjDnhCbkTQgCwdv3C0L0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ofYjb/btrSB3cRmrf/R6kjDnhCbkTQgCwdv3C0L0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ofYjb/btrSB3cRmrf/R6kjDnhCbkTQgCwdv3C0L0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FofYjb%2FbtrSB3cRmrf%2FR6kjDnhCbkTQgCwdv3C0L0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1587&quot; height=&quot;212&quot; data-origin-width=&quot;1587&quot; data-origin-height=&quot;212&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;※ DB Link 삭제 방법&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1669888954590&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;###DROP DATABASE LINK
BEGIN
DBMS_CLOUD_ADMIN.DROP_DATABASE_LINK(
  db_link_name =&amp;gt; ' '
);
END;
/&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ DB&lt;/span&gt;&lt;span&gt;link test&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1669888995787&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;select * from dba_users@TESTDBLINK;&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Cloud/OCI(Oracle Cloud Infrastructure)</category>
      <category>ATP</category>
      <category>dblink</category>
      <category>oci</category>
      <category>oracle</category>
      <author>jeonghyun</author>
      <guid isPermaLink="true">https://jhdatabase.tistory.com/125</guid>
      <comments>https://jhdatabase.tistory.com/entry/OCI-ATP-to-Oracle-DBLink#entry125comment</comments>
      <pubDate>Thu, 1 Dec 2022 19:04:28 +0900</pubDate>
    </item>
    <item>
      <title>[OCI - ATP Database 접속 방법]</title>
      <link>https://jhdatabase.tistory.com/entry/OCI-ATP-Database-%EC%A0%91%EC%86%8D-%EB%B0%A9%EB%B2%95</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;Oracle Autonomous Database&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;nbsp;&lt;/span&gt;란&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;span style=&quot;color: #47423e;&quot;&gt;Oracle Autonomous Database&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #47423e;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #47423e;&quot;&gt;는 탄력적으로 확장되고 빠른 쿼리 성능을 제공하는 사용하기 쉽고 완전 자율적인 데이터베이스를 제공합니다.&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #47423e;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #47423e;&quot;&gt;서비스로서&lt;/span&gt;&lt;span style=&quot;color: #47423e;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #47423e;&quot;&gt;Autonomous Database&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #47423e;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #47423e;&quot;&gt;는 데이터베이스 관리가 필요하지 않습니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span style=&quot;color: #47423e;&quot;&gt;Autonomous Database&amp;nbsp;를 사용&amp;nbsp;하면 하드웨어를 구성 또는 관리하거나 소프트웨어를 설치할 필요가 없습니다.&amp;nbsp;자율 데이터베이스&amp;nbsp;는 데이터베이스 프로비저닝, 데이터베이스 백업, 데이터베이스 패치 및 업그레이드, 데이터베이스 확장 또는 축소를 처리합니다.&amp;nbsp;Autonomous Database&amp;nbsp;는 완전히 탄력적인 서비스입니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #47423e;&quot;&gt;언제든지 OCPU 또는 스토리지 용량을 확장, 늘리거나 줄일 수 있습니다.&amp;nbsp;Autonomous Database&amp;nbsp;인스턴스에 대한 리소스를 변경&amp;nbsp;하면 다운타임이나 서비스 중단 없이 리소스가 자동으로 줄어들거나 늘어납니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #47423e;&quot;&gt;Autonomous Database&amp;nbsp;는 Oracle Database를 기반으로 하므로 Oracle Database를 지원하는 애플리케이션과 도구는&amp;nbsp;Autonomous Database&amp;nbsp;도 지원 합니다.&amp;nbsp;이러한 도구와 응용 프로그램은&amp;nbsp;표준 SQL*Net 연결을 사용 하여&amp;nbsp;Autonomous Database 에 연결합니다.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #47423e;&quot;&gt;도구와 애플리케이션은 데이터 센터나 퍼블릭 클라우드에 있을 수 있습니다. Oracle Analytics Cloud 및 기타 Oracle Cloud 서비스는 자율 데이터베이스 연결을 지원합니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;■ DB 접속 클릭 -&amp;gt; 전자 지갑 다운로드 클릭&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1897&quot; data-origin-height=&quot;916&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NeihZ/btrSCcgvi8I/FXhiumCevPJN8Q5Om5FGD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NeihZ/btrSCcgvi8I/FXhiumCevPJN8Q5Om5FGD0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NeihZ/btrSCcgvi8I/FXhiumCevPJN8Q5Om5FGD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNeihZ%2FbtrSCcgvi8I%2FFXhiumCevPJN8Q5Om5FGD0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1897&quot; height=&quot;916&quot; data-origin-width=&quot;1897&quot; data-origin-height=&quot;916&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;■ SQL Developer 실행&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;886&quot; data-origin-height=&quot;706&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blwp2u/btrSAwGyFQv/Xv2HobLnWac1fumJUa1CR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blwp2u/btrSAwGyFQv/Xv2HobLnWac1fumJUa1CR0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blwp2u/btrSAwGyFQv/Xv2HobLnWac1fumJUa1CR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fblwp2u%2FbtrSAwGyFQv%2FXv2HobLnWac1fumJUa1CR0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;886&quot; height=&quot;706&quot; data-origin-width=&quot;886&quot; data-origin-height=&quot;706&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ 새로 만들기 -&amp;gt; 접속유형 클라우드 전자 지갑 -&amp;gt; 찾아보기&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1714&quot; data-origin-height=&quot;929&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cnlT74/btrSyT24Ya4/wTEK5oFRLRzuUaCF0iKgd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cnlT74/btrSyT24Ya4/wTEK5oFRLRzuUaCF0iKgd0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cnlT74/btrSyT24Ya4/wTEK5oFRLRzuUaCF0iKgd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcnlT74%2FbtrSyT24Ya4%2FwTEK5oFRLRzuUaCF0iKgd0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1714&quot; height=&quot;929&quot; data-origin-width=&quot;1714&quot; data-origin-height=&quot;929&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ tnsnames.ora에 있는 서비스 선택 -&amp;gt; 사용자 정보 기입(admin/passwd) -&amp;gt; 테스트 클릭&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;766&quot; data-origin-height=&quot;493&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bF9HDE/btrSAxyExmg/HAZm1CCgY4Cn2crvruYZ9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bF9HDE/btrSAxyExmg/HAZm1CCgY4Cn2crvruYZ9K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bF9HDE/btrSAxyExmg/HAZm1CCgY4Cn2crvruYZ9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbF9HDE%2FbtrSAxyExmg%2FHAZm1CCgY4Cn2crvruYZ9K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;766&quot; height=&quot;493&quot; data-origin-width=&quot;766&quot; data-origin-height=&quot;493&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ 접속 확인&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1714&quot; data-origin-height=&quot;929&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/edRFxi/btrSBonWAHV/hhFl6cOboBCx91IMtTH2r1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/edRFxi/btrSBonWAHV/hhFl6cOboBCx91IMtTH2r1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/edRFxi/btrSBonWAHV/hhFl6cOboBCx91IMtTH2r1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FedRFxi%2FbtrSBonWAHV%2FhhFl6cOboBCx91IMtTH2r1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1714&quot; height=&quot;929&quot; data-origin-width=&quot;1714&quot; data-origin-height=&quot;929&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Cloud/OCI(Oracle Cloud Infrastructure)</category>
      <category>ATP</category>
      <category>oci</category>
      <category>oracle cloud</category>
      <author>jeonghyun</author>
      <guid isPermaLink="true">https://jhdatabase.tistory.com/124</guid>
      <comments>https://jhdatabase.tistory.com/entry/OCI-ATP-Database-%EC%A0%91%EC%86%8D-%EB%B0%A9%EB%B2%95#entry124comment</comments>
      <pubDate>Thu, 1 Dec 2022 18:40:46 +0900</pubDate>
    </item>
    <item>
      <title>[MySQL - Tunner 설치]</title>
      <link>https://jhdatabase.tistory.com/entry/MySQL-Tunner-%EC%84%A4%EC%B9%98</link>
      <description>&lt;div&gt;&lt;b&gt;&lt;span&gt;MySQL Tunner란&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;MySQL현재 설정값과 서버의 사양, 사용상태들을 비교하여 MySQL설정을 하는 방법으로, perl 스크립트로 동작하며&amp;nbsp;현재 설정과 서버의 사양 , 사용 상태들을 비교하여 mysql 의 설정을 어떻게 바꾸면 좋을지 몇 가지 기본 성능 제안과 함께 간단한 형식으로 알려주는 툴입니다.&lt;/div&gt;
&lt;div&gt;MySQLTuner 는 MySQL / MariaDB / Percona Server에 대해 300 여개의 지표를 지원합니다.&lt;/div&gt;
&lt;div&gt;MySQL, MariaDB 에서 동작하며, 리눅스에서 동작하나, &lt;u&gt;&lt;b&gt;&lt;span&gt;윈도우에서는 지원하지 않습니다.&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;&lt;/div&gt;
&lt;div&gt;저와같은 초보 DB관리자가 성능개선을 위해 이것저것 알아볼때 빠뜨리는 부분을 확인 할 수 있어 좋습니다.&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ 호환성 목록&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;[MySQL]&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;MySQL 8 (partial support, password checks don't work)&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;MySQL 5.7 (full support)&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;MySQL 5.6 (full support)&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;MySQL 5.5 (full support, no more MySQL support)&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[MariaDB]&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;MariaDB 10.5 (partial support)&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;MariaDB 10.4 (full support)&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;MariaDB 10.3 (full support)&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;MariaDB 10.2 (full support)&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;MariaDB 10.1 (full support)&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;MariaDB 10.0 (full support, 6 last month support)&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;MariaDB 5.5 (full support, no more MariaDB support)&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;[Percona]&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;Percona Server 8.0 (partial support, password checks don't work)&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;Percona Server 5.7 (full support)&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;Percona Server 5.6 (full support)&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;Percona XtraDB cluster (partial support, no test environment)&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;Mysql Replications (partial support, no test environment)&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;Galera replication (partial support, no test environment)&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;MySQL 3.23, 4.0, 4.1, 5.0, 5.1, 5.5 (partial support - deprecated version)&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;Perl은 최소 5.6 이상 필요 하며 perl-doc 패키지도 같이 필요 합니다&lt;/div&gt;
&lt;div&gt;Unix/Linux based 환경만 지원 합니다&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;테스트 환경 &lt;/b&gt;&lt;/blockquote&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;Hostname&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;OS version&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;IP&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;DB version&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;mysql&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;CentOS Linux release 7.3.1611&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;192.168.100.84&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;MySQL&amp;nbsp;8.0.28&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;※ 사전 확인&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;MySQL 5.7.7 버전부터 기본포함이며 5.6 버전 부터 별도로 설치가 가능 합니다. 5.6 버전을 사용한다면 별도로 SYS Schema 를 설치 해야 합니다.&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ MySQL Tunner Download&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1667617232473&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@mysql ~]# wget http://mysqltuner.pl/ -O mysqltuner.pl
--2022-11-04 13:37:00--  http://mysqltuner.pl/
Resolving mysqltuner.pl (mysqltuner.pl)... 217.70.184.38
Connecting to mysqltuner.pl (mysqltuner.pl)|217.70.184.38|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://raw.github.com/major/MySQLTuner-perl/master/mysqltuner.pl [following]
--2022-11-04 13:37:01--  https://raw.github.com/major/MySQLTuner-perl/master/mysqltuner.pl
Resolving raw.github.com (raw.github.com)... 185.199.111.133, 185.199.108.133, 185.199.110.133, ...
Connecting to raw.github.com (raw.github.com)|185.199.111.133|:443... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl [following]
--2022-11-04 13:37:02--  https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.111.133, 185.199.110.133, 185.199.109.133, ...
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.111.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 245210 (239K) [text/plain]
Saving to: &amp;lsquo;mysqltuner.pl&amp;rsquo;

100%[===================================================================================================================================================&amp;gt;] 245,210     --.-K/s   in 0.003s  

2022-11-04 13:37:02 (69.7 MB/s) - &amp;lsquo;mysqltuner.pl&amp;rsquo; saved [245210/245210]




[root@mysql ~]# wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/basic_passwords.txt -O basic_passwords.txt
--2022-11-04 13:37:07--  https://raw.githubusercontent.com/major/MySQLTuner-perl/master/basic_passwords.txt
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.108.133, 185.199.110.133, 185.199.111.133, ...
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.108.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3988 (3.9K) [text/plain]
Saving to: &amp;lsquo;basic_passwords.txt&amp;rsquo;

100%[===================================================================================================================================================&amp;gt;] 3,988       --.-K/s   in 0s      

2022-11-04 13:37:07 (63.6 MB/s) - &amp;lsquo;basic_passwords.txt&amp;rsquo; saved [3988/3988]




[root@mysql ~]# wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/vulnerabilities.csv -O vulnerabilities.csv
--2022-11-04 13:37:14--  https://raw.githubusercontent.com/major/MySQLTuner-perl/master/vulnerabilities.csv
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.110.133, 185.199.111.133, 185.199.109.133, ...
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.110.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2150147 (2.0M) [text/plain]
Saving to: &amp;lsquo;vulnerabilities.csv&amp;rsquo;

100%[===================================================================================================================================================&amp;gt;] 2,150,147   --.-K/s   in 0.01s   

2022-11-04 13:37:14 (178 MB/s) - &amp;lsquo;vulnerabilities.csv&amp;rsquo; saved [2150147/2150147]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ Minimal 점검 (최소한의 정보 점검 실행)&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1667617257045&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@mysql ~]# perl mysqltuner.pl
&amp;gt;&amp;gt;  MySQLTuner 2.0.9
     * Jean-Marie Renouard &amp;lt;jmrenouard@gmail.com&amp;gt;
     * Major Hayden &amp;lt;major@mhtx.net&amp;gt;
&amp;gt;&amp;gt;  Bug reports, feature requests, and downloads at http://mysqltuner.pl/
&amp;gt;&amp;gt;  Run with '--help' for additional options and output filtering
[--] Skipped version check for MySQLTuner script
Please enter your MySQL administrative login: &amp;lt;DB Adminuser&amp;gt;
Please enter your MySQL administrative password: &amp;lt;DB Adminuser password&amp;gt;
[OK] Currently running supported MySQL version 8.0.28
[OK] Operating on 64-bit architecture
-------- Log file Recommendations ------------------------------------------------------------------
[OK] Log file /log/mariadb.log exists
[--] Log file: /log/mariadb.log (59K)
[OK] Log file /log/mariadb.log is not empty
[OK] Log file /log/mariadb.log is smaller than 32 Mb
[OK] Log file /log/mariadb.log is readable.
[!!] /log/mariadb.log contains 242 warning(s).
[!!] /log/mariadb.log contains 111 error(s).
[--] 14 start(s) detected in /log/mariadb.log
[--] 1) 2022-11-02T05:12:42.369015Z 0 [System] [MY-010931] [Server] /mysql/bin/mysqld: ready for connections. Version: '8.0.28'  socket: '/var/lib/mysql/mysql.sock'  port: 3306  MySQL Community Server - GPL.
[--] 2) 2022-11-02T05:12:42.368342Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /tmp/mysqlx.sock
[--] 3) 2022-10-03T23:52:43.999076Z 0 [System] [MY-010931] [Server] /mysql/bin/mysqld: ready for connections. Version: '8.0.28'  socket: '/var/lib/mysql/mysql.sock'  port: 3306  MySQL Community Server - GPL.
[--] 4) 2022-10-03T23:52:43.999032Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /tmp/mysqlx.sock
[--] 5) 2022-09-28T23:27:05.654719Z 0 [System] [MY-010931] [Server] /mysql/bin/mysqld: ready for connections. Version: '8.0.28'  socket: '/var/lib/mysql/mysql.sock'  port: 3306  MySQL Community Server - GPL.
[--] 6) 2022-09-28T23:27:05.654086Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /tmp/mysqlx.sock
[--] 7) 2022-09-22T22:36:24.828347Z 0 [System] [MY-010931] [Server] /mysql/bin/mysqld: ready for connections. Version: '8.0.28'  socket: '/var/lib/mysql/mysql.sock'  port: 3306  MySQL Community Server - GPL.
[--] 8) 2022-09-22T22:36:24.828304Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /tmp/mysqlx.sock
[--] 9) 2022-08-19T05:17:53.431102Z 0 [System] [MY-010931] [Server] /mysql/bin/mysqld: ready for connections. Version: '8.0.28'  socket: '/var/lib/mysql/mysql.sock'  port: 3306  MySQL Community Server - GPL.
[--] 10) 2022-08-19T05:17:53.431031Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /tmp/mysqlx.sock
[--] 8 shutdown(s) detected in /log/mariadb.log
[--] 1) 2022-10-06T21:56:36.438689Z 0 [System] [MY-010910] [Server] /mysql/bin/mysqld: Shutdown complete (mysqld 8.0.28)  MySQL Community Server - GPL.
[--] 2) 2022-10-03T23:52:36.559439Z 0 [System] [MY-010910] [Server] /mysql/bin/mysqld: Shutdown complete (mysqld 8.0.28)  MySQL Community Server - GPL.
[--] 3) 2022-09-23T07:26:22.894996Z 0 [System] [MY-010910] [Server] /mysql/bin/mysqld: Shutdown complete (mysqld 8.0.28)  MySQL Community Server - GPL.
[--] 4) 2022-09-22T22:38:22.594730Z 0 [System] [MY-010910] [Server] /mysql/bin/mysqld: Shutdown complete (mysqld 8.0.28)  MySQL Community Server - GPL.
[--] 5) 2022-08-26T22:19:28.523595Z 0 [System] [MY-010910] [Server] /mysql/bin/mysqld: Shutdown complete (mysqld 8.0.28)  MySQL Community Server - GPL.
[--] 6) 2022-08-19T05:17:46.781341Z 0 [System] [MY-010910] [Server] /mysql/bin/mysqld: Shutdown complete (mysqld 8.0.28)  MySQL Community Server - GPL.
[--] 7) 2022-08-19T05:12:23.298416Z 0 [System] [MY-010910] [Server] /mysql/bin/mysqld: Shutdown complete (mysqld 8.0.28)  MySQL Community Server - GPL.
[--] 8) 2022-08-19T05:11:48.659089Z 0 [System] [MY-010910] [Server] /mysql/bin/mysqld: Shutdown complete (mysqld 8.0.28)  MySQL Community Server - GPL.
-------- Storage Engine Statistics -----------------------------------------------------------------
[--] Status: +ARCHIVE +BLACKHOLE +CSV -FEDERATED +InnoDB +MEMORY +MRG_MYISAM +MyISAM +PERFORMANCE_SCHEMA
[--] Data in InnoDB tables: 32.0K (Tables: 2)
[OK] Total fragmented tables: 0
-------- Analysis Performance Metrics --------------------------------------------------------------
[--] innodb_stats_on_metadata: OFF
[OK] No stat updates during querying INFORMATION_SCHEMA.
-------- Views Metrics -----------------------------------------------------------------------------
-------- Triggers Metrics --------------------------------------------------------------------------
-------- Routines Metrics --------------------------------------------------------------------------
-------- Security Recommendations ------------------------------------------------------------------
[--] Skipped due to unsupported feature for MySQL 8
-------- CVE Security Recommendations --------------------------------------------------------------
[!!] CVE-2022-21412(&amp;lt;= 8.0.28) : &quot;Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.28 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).&quot;
[!!] CVE-2022-21413(&amp;lt;= 8.0.28) : &quot;Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: DML). Supported versions that are affected are 8.0.28 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).&quot;
[!!] CVE-2022-21414(&amp;lt;= 8.0.28) : &quot;Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.28 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).&quot;
[!!] CVE-2022-21415(&amp;lt;= 8.0.28) : &quot;Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Replication). Supported versions that are affected are 8.0.28 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).&quot;
[!!] CVE-2022-21417(&amp;lt;= 8.0.28) : &quot;Vulnerability in the MySQL Server product of Oracle MySQL (component: InnoDB). Supported versions that are affected are 5.7.37 and prior and 8.0.28 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).&quot;
[!!] CVE-2022-21418(&amp;lt;= 8.0.28) : &quot;Vulnerability in the MySQL Server product of Oracle MySQL (component: InnoDB). Supported versions that are affected are 8.0.28 and prior. Difficult to exploit vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server as well as unauthorized update
[!!] CVE-2022-21423(&amp;lt;= 8.0.28) : &quot;Vulnerability in the MySQL Server product of Oracle MySQL (component: InnoDB). Supported versions that are affected are 8.0.28 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a partial denial of service (partial DOS) of MySQL Server. CVSS 3.1 Base Score 2.7 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:L).&quot;
[!!] CVE-2022-21425(&amp;lt;= 8.0.28) : &quot;Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: DDL). Supported versions that are affected are 8.0.28 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server as well as unauthorized update
[!!] CVE-2022-21427(&amp;lt;= 8.0.28) : &quot;Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: FTS). Supported versions that are affected are 5.7.37 and prior and 8.0.28 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).&quot;
[!!] CVE-2022-21435(&amp;lt;= 8.0.28) : &quot;Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.28 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).&quot;
[!!] CVE-2022-21436(&amp;lt;= 8.0.28) : &quot;Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.28 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).&quot;
[!!] CVE-2022-21437(&amp;lt;= 8.0.28) : &quot;Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.28 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).&quot;
[!!] CVE-2022-21438(&amp;lt;= 8.0.28) : &quot;Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.28 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).&quot;
[!!] CVE-2022-21440(&amp;lt;= 8.0.28) : &quot;Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.28 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server as well as unauthorized update
[!!] CVE-2022-21444(&amp;lt;= 8.0.28) : &quot;Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: DDL). Supported versions that are affected are 5.7.37 and prior and 8.0.28 and prior. Difficult to exploit vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.4 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:U/C:N/I:N/A:H).&quot;
[!!] CVE-2022-21451(&amp;lt;= 8.0.28) : &quot;Vulnerability in the MySQL Server product of Oracle MySQL (component: InnoDB). Supported versions that are affected are 5.7.37 and prior and 8.0.28 and prior. Difficult to exploit vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.4 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:U/C:N/I:N/A:H).&quot;
[!!] CVE-2022-21452(&amp;lt;= 8.0.28) : &quot;Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.28 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).&quot;
[!!] CVE-2022-21454(&amp;lt;= 8.0.28) : &quot;Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Group Replication Plugin). Supported versions that are affected are 5.7.37 and prior and 8.0.28 and prior. Easily exploitable vulnerability allows low privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 6.5 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H).&quot;
[!!] CVE-2022-21457(&amp;lt;= 8.0.28) : &quot;Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: PAM Auth Plugin). Supported versions that are affected are 8.0.28 and prior. Difficult to exploit vulnerability allows unauthenticated attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized access to critical data or complete access to all MySQL Server accessible data. CVSS 3.1 Base Score 5.9 (Confidentiality impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N).&quot;
[!!] CVE-2022-21459(&amp;lt;= 8.0.28) : &quot;Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.28 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server as well as unauthorized update
[!!] CVE-2022-21460(&amp;lt;= 8.0.28) : &quot;Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Logging). Supported versions that are affected are 5.7.37 and prior and 8.0.28 and prior. Difficult to exploit vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized access to critical data or complete access to all MySQL Server accessible data. CVSS 3.1 Base Score 4.4 (Confidentiality impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:U/C:H/I:N/A:N).&quot;
[!!] CVE-2022-21462(&amp;lt;= 8.0.28) : &quot;Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.28 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).&quot;
[!!] CVE-2022-21478(&amp;lt;= 8.0.28) : &quot;Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.28 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server as well as unauthorized update
[!!] CVE-2022-21479(&amp;lt;= 8.0.28) : &quot;Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.28 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server and unauthorized read access to a subset of MySQL Server accessible data. CVSS 3.1 Base Score 5.5 (Confidentiality and Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:L/I:N/A:H).&quot;
[!!] 24 CVE(s) found for your MySQL release.
-------- Performance Metrics -----------------------------------------------------------------------
[--] Up for: 1d 23h 34m 55s (787 q [0.005 qps], 232 conn, TX: 725K, RX: 74K)
[--] Reads / Writes: 100% / 0%
[--] Binary logging is enabled (GTID MODE: OFF)
[--] Physical Memory     : 3.5G
[--] Max MySQL memory    : 10.1G
[--] Other process memory: 0B
[--] Total buffers: 168.0M global + 65.9M per thread (151 max threads)
[--] Performance_schema Max memory usage: 223M
[--] Galera GCache Max memory usage: 0B
[OK] Maximum reached memory usage: 523.4M (14.81% of installed RAM)
[!!] Maximum possible memory usage: 10.1G (292.57% of installed RAM)
[!!] Overall possible memory usage with other process exceeded memory
[OK] Slow queries: 0% (0/787)
[OK] Highest usage of available connections: 1% (2/151)
[!!] Aborted connections: 12.93% (30/232)
[!!] Name resolution is active: a reverse name resolution is made for each new connection which can reduce performance
[--] Query cache has been removed since MySQL 8.0
[OK] Sorts requiring temporary tables: 2% (5 temp sorts / 211 sorts)
[OK] No joins without indexes
[OK] Temporary tables created on disk: 2% (8 on disk / 275 total)
[OK] Thread cache hit rate: 98% (3 created / 232 connections)
[OK] Table cache hit rate: 90% (9K hits / 10K requests)
[OK] table_definition_cache (2000) is greater than number of tables (328)
[OK] Open file limit used: 0% (6/8K)
[OK] Table locks acquired immediately: 100% (186 immediate / 186 locks)
[OK] Binlog cache memory access: 100.00% (4 Memory / 4 Total)
-------- Performance schema ------------------------------------------------------------------------
[--] Performance_schema is activated.
[--] Memory used by Performance_schema: 223.6M
[--] Sys schema is installed.
-------- ThreadPool Metrics ------------------------------------------------------------------------
[--] ThreadPool stat is disabled.
-------- MyISAM Metrics ----------------------------------------------------------------------------
[--] MyISAM Metrics are disabled since MySQL 8.0.
-------- InnoDB Metrics ----------------------------------------------------------------------------
[--] InnoDB is enabled.
[--] InnoDB Thread Concurrency: 0
[OK] InnoDB File per table is activated
[OK] InnoDB buffer pool / data size: 128.0M / 32.0K
[!!] Ratio InnoDB log file size / InnoDB Buffer pool size (75%): 48.0M * 2 / 128.0M should be equal to 25%
[OK] InnoDB buffer pool instances: 1
[--] Number of InnoDB Buffer Pool Chunk: 1 for 1 Buffer Pool Instance(s)
[OK] Innodb_buffer_pool_size aligned with Innodb_buffer_pool_chunk_size &amp;amp; Innodb_buffer_pool_instances
[OK] InnoDB Read buffer efficiency: 98.04% (55111 hits / 56215 total)
[!!] InnoDB Write Log efficiency: 89.33% (904 hits / 1012 total)
[OK] InnoDB log waits: 0.00% (0 waits / 108 writes)
-------- Aria Metrics ------------------------------------------------------------------------------
[--] Aria Storage Engine not available.
-------- TokuDB Metrics ----------------------------------------------------------------------------
[--] TokuDB is disabled.
-------- XtraDB Metrics ----------------------------------------------------------------------------
[--] XtraDB is disabled.
-------- Galera Metrics ----------------------------------------------------------------------------
[--] Galera is disabled.
-------- Replication Metrics -----------------------------------------------------------------------
[--] Galera Synchronous replication: NO
[--] No replication slave(s) for this server.
[--] Binlog format: ROW
[--] XA support enabled: ON
[--] Semi synchronous replication Master: Not Activated
[--] Semi synchronous replication Slave: Not Activated
[--] This is a standalone server
-------- Recommendations ---------------------------------------------------------------------------
General recommendations:
    Check warning line(s) in /log/mariadb.log file
    Check error line(s) in /log/mariadb.log file
    24 CVE(s) found for your MySQL release. Consider upgrading your version !
    Reduce your overall MySQL memory footprint for system stability
    Dedicate this server to your database for highest performance.
    Reduce or eliminate unclosed connections and network issues
    Configure your accounts with ip or subnets only, then update your configuration with skip-name-resolve=1
    Buffer Key MyISAM set to 0, no MyISAM table detected
    Before changing innodb_log_file_size and/or innodb_log_files_in_group read this: https://bit.ly/2TcGgtU
Variables to adjust:
  *** MySQL's maximum memory usage is dangerously high ***
  *** Add RAM before increasing MySQL buffer variables ***
    skip-name-resolve=1
    key_buffer_size=0
    innodb_log_file_size should be (=16M) if possible, so InnoDB total log files size equals 25% of buffer pool size.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;■ Maximum 점검 (&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;디버깅 없이 모든 환경 설정 점검)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1667617276517&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@mysql ~]# perl mysqltuner.pl --buffers --dbstat --idxstat --sysstat --pfstat --tbstat --outputfile /root/mysqltuner.txt
&amp;gt;&amp;gt;  MySQLTuner 2.0.9
     * Jean-Marie Renouard &amp;lt;jmrenouard@gmail.com&amp;gt;
     * Major Hayden &amp;lt;major@mhtx.net&amp;gt;
&amp;gt;&amp;gt;  Bug reports, feature requests, and downloads at http://mysqltuner.pl/
&amp;gt;&amp;gt;  Run with '--help' for additional options and output filtering

[--] Skipped version check for MySQLTuner script
Please enter your MySQL administrative login: &amp;lt;DB Adminuser&amp;gt;
Please enter your MySQL administrative password: &amp;lt;DB Adminuser password&amp;gt;
[OK] Currently running supported MySQL version 8.0.28
[OK] Operating on 64-bit architecture
...
생략
...&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;결과값이 길기때문에 파일로 생성하여 보는것이 좋습니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;문제가 되는 부분은&amp;nbsp;&lt;/span&gt;&lt;span&gt;결과에서&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;[!!]&lt;/span&gt;&lt;span&gt;로 표시해주기 때문에 정정할 방안을 모색해야합니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;MySQLTunner.pl에서 제안하는 &lt;b&gt;'Recommendations'&lt;/b&gt;를 적극 참고합니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;운영중인 DB 서버에서 Maximum 점검을 하게 되면 많은 결과값이 나오므로 Minimal로 점검하여 참고 합니다.&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;참고&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://hoing.io/archives/7154&quot;&gt;https://hoing.io/archives/7154&lt;/a&gt;
&lt;figure id=&quot;og_1667617322177&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;MySQLTuner - MySQL 성능(튜닝) 진단 툴 - 성능 및 구성 최적화&quot; data-og-description=&quot; &quot; data-og-host=&quot;hoing.io&quot; data-og-source-url=&quot;https://hoing.io/archives/7154&quot; data-og-url=&quot;https://hoing.io/archives/7154&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/eKloc/hyQtC7m3Fi/AwafY2JPkFHwTa5RXBj1YK/img.png?width=500&amp;amp;height=500&amp;amp;face=0_0_500_500,https://scrap.kakaocdn.net/dn/9GBnC/hyQsjhh8zC/Y2WZp3hRfch8sMu4wKmp81/img.png?width=500&amp;amp;height=500&amp;amp;face=0_0_500_500,https://scrap.kakaocdn.net/dn/ePg7c/hyQr9ThTby/xkbXZFJ2Rt4wVCMEKfek0k/img.png?width=762&amp;amp;height=1894&amp;amp;face=0_0_762_1894&quot;&gt;&lt;a href=&quot;https://hoing.io/archives/7154&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://hoing.io/archives/7154&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/eKloc/hyQtC7m3Fi/AwafY2JPkFHwTa5RXBj1YK/img.png?width=500&amp;amp;height=500&amp;amp;face=0_0_500_500,https://scrap.kakaocdn.net/dn/9GBnC/hyQsjhh8zC/Y2WZp3hRfch8sMu4wKmp81/img.png?width=500&amp;amp;height=500&amp;amp;face=0_0_500_500,https://scrap.kakaocdn.net/dn/ePg7c/hyQr9ThTby/xkbXZFJ2Rt4wVCMEKfek0k/img.png?width=762&amp;amp;height=1894&amp;amp;face=0_0_762_1894');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;MySQLTuner - MySQL 성능(튜닝) 진단 툴 - 성능 및 구성 최적화&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hoing.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://yunhyeonglee.tistory.com/5&quot;&gt;https://yunhyeonglee.tistory.com/5&lt;/a&gt;
&lt;figure id=&quot;og_1667617328837&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;MySQLTunner.pl - MySQL 성능 진단 툴&quot; data-og-description=&quot;MySQLTunner 는 MySQL 설치를 빠르게 검토하고 성능과 안전성을 높이기 위해 조정할 수 있는 Perl로 작성된 스크립트이다. 현재 구성 변수 및 상태 데이터가 검색되어 몇가지 기본 성능 제안 함께 간단&quot; data-og-host=&quot;yunhyeonglee.tistory.com&quot; data-og-source-url=&quot;https://yunhyeonglee.tistory.com/5&quot; data-og-url=&quot;https://yunhyeonglee.tistory.com/5&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bjj7HF/hyQtx539PR/IHuKYkIJWk9Ml2hIY4bps1/img.png?width=800&amp;amp;height=584&amp;amp;face=0_0_800_584,https://scrap.kakaocdn.net/dn/bIALeK/hyQtyKFYdW/WzjjWdCeLBRCcWFWrnUrFK/img.png?width=800&amp;amp;height=584&amp;amp;face=0_0_800_584,https://scrap.kakaocdn.net/dn/7fEqy/hyQshwZIFQ/9Div8cpLmHUBS52P8oNWkk/img.jpg?width=1080&amp;amp;height=1080&amp;amp;face=0_0_1080_1080&quot;&gt;&lt;a href=&quot;https://yunhyeonglee.tistory.com/5&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://yunhyeonglee.tistory.com/5&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bjj7HF/hyQtx539PR/IHuKYkIJWk9Ml2hIY4bps1/img.png?width=800&amp;amp;height=584&amp;amp;face=0_0_800_584,https://scrap.kakaocdn.net/dn/bIALeK/hyQtyKFYdW/WzjjWdCeLBRCcWFWrnUrFK/img.png?width=800&amp;amp;height=584&amp;amp;face=0_0_800_584,https://scrap.kakaocdn.net/dn/7fEqy/hyQshwZIFQ/9Div8cpLmHUBS52P8oNWkk/img.jpg?width=1080&amp;amp;height=1080&amp;amp;face=0_0_1080_1080');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;MySQLTunner.pl - MySQL 성능 진단 툴&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;MySQLTunner 는 MySQL 설치를 빠르게 검토하고 성능과 안전성을 높이기 위해 조정할 수 있는 Perl로 작성된 스크립트이다. 현재 구성 변수 및 상태 데이터가 검색되어 몇가지 기본 성능 제안 함께 간단&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;yunhyeonglee.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;/div&gt;</description>
      <category>DataBase/MySQL &amp;amp; MariaDB</category>
      <category>mysql</category>
      <category>Tool</category>
      <category>Tunner</category>
      <author>jeonghyun</author>
      <guid isPermaLink="true">https://jhdatabase.tistory.com/122</guid>
      <comments>https://jhdatabase.tistory.com/entry/MySQL-Tunner-%EC%84%A4%EC%B9%98#entry122comment</comments>
      <pubDate>Sat, 5 Nov 2022 12:03:10 +0900</pubDate>
    </item>
    <item>
      <title>[NCP - Object Storage 마운트] use. awscli</title>
      <link>https://jhdatabase.tistory.com/entry/NCP-Object-Storage-%EB%A7%88%EC%9A%B4%ED%8A%B8-use-awscli</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Naver Cloud의 오브젝트 스토리지를 블록스토리지처럼 서버에 마운트하여 데이터를 올리는 테스트를 해보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ golang install&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;golang URL :&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;a href=&quot;https://go.dev/dl/&quot;&gt;https://go.dev/dl/&lt;/a&gt;&lt;/span&gt;
&lt;figure id=&quot;og_1667616624431&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Downloads - The Go Programming Language&quot; data-og-description=&quot;Downloads After downloading a binary release suitable for your system, please follow the installation instructions. If you are building from source, follow the source installation instructions. See the release history for more information about Go releases&quot; data-og-host=&quot;go.dev&quot; data-og-source-url=&quot;https://go.dev/dl/&quot; data-og-url=&quot;https://go.dev/dl/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/beYOAq/hyQtzW6PTq/AuqvTNNumddJZWJip3xpX1/img.jpg?width=300&amp;amp;height=313&amp;amp;face=0_0_300_313&quot;&gt;&lt;a href=&quot;https://go.dev/dl/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://go.dev/dl/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/beYOAq/hyQtzW6PTq/AuqvTNNumddJZWJip3xpX1/img.jpg?width=300&amp;amp;height=313&amp;amp;face=0_0_300_313');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Downloads - The Go Programming Language&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Downloads After downloading a binary release suitable for your system, please follow the installation instructions. If you are building from source, follow the source installation instructions. See the release history for more information about Go releases&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;go.dev&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;pre id=&quot;code_1667616637929&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@jh-test ~]# yum -y install fuse-utils


[root@jh-test ~]# wget https://go.dev/dl/go1.18.7.linux-amd64.tar.gz
--2022-11-01 08:29:54--  https://go.dev/dl/go1.18.7.linux-amd64.tar.gz
Resolving go.dev (go.dev)... 216.239.36.21, 216.239.38.21, 216.239.32.21, ...
Connecting to go.dev (go.dev)|216.239.36.21|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://dl.google.com/go/go1.18.7.linux-amd64.tar.gz [following]
--2022-11-01 08:29:55--  https://dl.google.com/go/go1.18.7.linux-amd64.tar.gz
Resolving dl.google.com (dl.google.com)... 142.251.42.142, 2404:6800:4004:825::200e
Connecting to dl.google.com (dl.google.com)|142.251.42.142|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 141906548 (135M) [application/x-gzip]
Saving to: &amp;lsquo;go1.18.7.linux-amd64.tar.gz&amp;rsquo;

100%[===================================================================================================================================================&amp;gt;] 141,906,548 79.9MB/s   in 1.7s   

2022-11-01 08:29:57 (79.9 MB/s) - &amp;lsquo;go1.18.7.linux-amd64.tar.gz&amp;rsquo; saved [141906548/141906548]


[root@jh-test ~]# tar -zxvf go1.18.7.linux-amd64.tar.gz


[root@jh-test ~]# mv go /usr/local/&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ 환경 설정&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1667616657403&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@jh-test ~]# vi ~/.bash_profile

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin:/mysql/bin

export GOROOT=/usr/local/go
export GOPATH=$HOME
export PATH=$GOPATH/bin:$GOROOT/bin:$PATH



[root@jh-test ~]# source ~/.bash_profile&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ Goofys 다운 및 권한설정&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;※ goofys란?&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #444444;&quot;&gt;goofys는 Go로 작성된 고성능 POSIX 방식의 Amazon S3 파일 시스템입니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #444444;&quot;&gt;goofys를 사용하면 S3 버킷을 리눅스에서 파일 시스템으로 마운트 할 수 있습니다.&lt;/span&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1667616696955&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@jh-test ~]# wget https://github.com/kahing/goofys/releases/latest/download/goofys -O /usr/local/bin/goofys

[root@jh-test ~]# chmod 755 /usr/local/bin/goofys

[root@jh-test ~]# goofys --version
goofys version 0.24.0-45b8d78375af1b24604439d2e60c567654bcdf88&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ Awscli 설치 &amp;amp; configure&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;goofys는 기본 API 인증키 위치를 ~/.aws/credentials로 바라보고 있습니다. 따라서 아래와 같이 파일을 생성 후 네이버 클라우드 플랫폼에서 마이페이지-&amp;gt;인증키 관리-&amp;gt;API 인증키 관리에서 정보를 확인하여 아래와 같이 기입합니다. aws_access_key_id는 Access Key ID와 대응되며,&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;aws_secret_access_key&lt;/span&gt;&lt;span&gt;는&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;Secret Key&lt;/span&gt;&lt;span&gt;의 값과 대응됩니다.&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;※ Access key, secret key 확인 방법&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;449&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wrBPc/btrQqmMX6fA/57fGkzuCkYmB9QwXQDEzgk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wrBPc/btrQqmMX6fA/57fGkzuCkYmB9QwXQDEzgk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wrBPc/btrQqmMX6fA/57fGkzuCkYmB9QwXQDEzgk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwrBPc%2FbtrQqmMX6fA%2F57fGkzuCkYmB9QwXQDEzgk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;773&quot; height=&quot;449&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;449&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1667616747850&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@jh-test ~]# yum -y install awscli


[root@jh-test ~]# aws configure
AWS Access Key ID [None]: &amp;lt;Access Key&amp;gt;
AWS Secret Access Key [None]: &amp;lt;Secret Key&amp;gt;
Default region name [None]:
Default output format [None]:&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ 마운트할 오브젝트 스토리지(버킷) 확인 &amp;amp; 마운트&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1590&quot; data-origin-height=&quot;368&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blbE6M/btrQqLeKxZe/5rE8h6eIaodk1iksEXKFuK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blbE6M/btrQqLeKxZe/5rE8h6eIaodk1iksEXKFuK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blbE6M/btrQqLeKxZe/5rE8h6eIaodk1iksEXKFuK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FblbE6M%2FbtrQqLeKxZe%2F5rE8h6eIaodk1iksEXKFuK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1590&quot; height=&quot;368&quot; data-origin-width=&quot;1590&quot; data-origin-height=&quot;368&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div&gt;네이버 클라우드 플랫폼의 object storage의 endpoint 위치 :&amp;nbsp;&lt;a href=&quot;https://kr.object.ncloudstorage.com/&quot;&gt;https://kr.object.ncloudstorage.com/&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;※ goofys --endpoint&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://kr.object.ncloudstorage.com/&quot;&gt;https://kr.object.ncloudstorage.com/&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;버킷명 마운트위치&lt;/div&gt;
&lt;pre id=&quot;code_1667616781761&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@jh-test ~]# mkdir /obj

[root@jh-test ~]# goofys --endpoint https://kr.object.ncloudstorage.com/ sts-test-obj /obj

[root@jh-test ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda3       48G  8.5G   40G  18% /
devtmpfs        1.9G     0  1.9G   0% /dev
tmpfs           1.8G     0  1.8G   0% /dev/shm
tmpfs           1.8G  8.4M  1.8G   1% /run
tmpfs           1.8G     0  1.8G   0% /sys/fs/cgroup
tmpfs           354M     0  354M   0% /run/user/0
sts-test-obj    1.0P     0  1.0P   0% /obj&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ 연동 테스트&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;&lt;/span&gt;&lt;/b&gt;
&lt;pre id=&quot;code_1667616802791&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;## 마운트한 오브젝트 스토리지에 테스트용 데이터 생성
[root@jh-test ~]# touch /obj/kim.test.txt&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1591&quot; data-origin-height=&quot;609&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ckQSHi/btrQsCOkVY2/HHjDz7jMolzmpgxbO21X5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ckQSHi/btrQsCOkVY2/HHjDz7jMolzmpgxbO21X5K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ckQSHi/btrQsCOkVY2/HHjDz7jMolzmpgxbO21X5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FckQSHi%2FbtrQsCOkVY2%2FHHjDz7jMolzmpgxbO21X5K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1591&quot; height=&quot;609&quot; data-origin-width=&quot;1591&quot; data-origin-height=&quot;609&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;참고&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://m.blog.naver.com/n_cloudplatform/222127162462&quot;&gt;https://m.blog.naver.com/n_cloudplatform/222127162462&lt;/a&gt;
&lt;figure id=&quot;og_1667616838251&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[이렇게 사용하세요!] 네이버 클라우드 플랫폼 Object Storage와 Goofys 간단히 연동하기&quot; data-og-description=&quot;네이버 클라우드 플랫폼에서 Object Storage 서비스와 Goofys와 연동하기 ※본 콘텐츠는 네이버 클라우...&quot; data-og-host=&quot;blog.naver.com&quot; data-og-source-url=&quot;https://m.blog.naver.com/n_cloudplatform/222127162462&quot; data-og-url=&quot;https://blog.naver.com/n_cloudplatform/222127162462&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/rZAcl/hyQtvUHL1p/U5l1t88mvnGOyzsdXbd1H0/img.png?width=743&amp;amp;height=372&amp;amp;face=0_0_743_372&quot;&gt;&lt;a href=&quot;https://m.blog.naver.com/n_cloudplatform/222127162462&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://m.blog.naver.com/n_cloudplatform/222127162462&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/rZAcl/hyQtvUHL1p/U5l1t88mvnGOyzsdXbd1H0/img.png?width=743&amp;amp;height=372&amp;amp;face=0_0_743_372');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[이렇게 사용하세요!] 네이버 클라우드 플랫폼 Object Storage와 Goofys 간단히 연동하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;네이버 클라우드 플랫폼에서 Object Storage 서비스와 Goofys와 연동하기 ※본 콘텐츠는 네이버 클라우...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;blog.naver.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;/div&gt;</description>
      <category>Cloud/NCP(Naver Cloud Platform)</category>
      <category>Mount</category>
      <category>ncp</category>
      <category>ObjectStorage</category>
      <author>jeonghyun</author>
      <guid isPermaLink="true">https://jhdatabase.tistory.com/121</guid>
      <comments>https://jhdatabase.tistory.com/entry/NCP-Object-Storage-%EB%A7%88%EC%9A%B4%ED%8A%B8-use-awscli#entry121comment</comments>
      <pubDate>Sat, 5 Nov 2022 11:54:51 +0900</pubDate>
    </item>
    <item>
      <title>[MySQL - Temporary Tablespace]</title>
      <link>https://jhdatabase.tistory.com/entry/MySQL-Temporary-Tablespace</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;메모리 부족 이슈 발생시 볼만하다는 소리를 듣고 찾아보게 되었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; temporary tablespace는 사용자가 임의적으로 create ~문 등을 사용해 임시 테이블을 생성할 때 undo 로그가 저장된다고 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ Temp tablespace&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;ibtmp1&amp;nbsp; : global temporary tablespace 공간은 사용자가 생성한 임시 테이블의 롤백 세그먼트를 저장합니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;innodb_temp_tablespace_dir : SESSION LEVEL로 ON-DISK 내부 임시테이블이 생성되는 공간 [사용자가 만든 임시 테이블 &amp;amp; 옵티마이저가 사용하는 임시 테이블 ]&lt;/span&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1667616180459&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;MariaDB [(none)]&amp;gt; show variables like '%temp%';
+---------------------------------+-----------------------+
| Variable_name                   | Value                 |
+---------------------------------+-----------------------+
| aria_used_for_temp_tables       | ON                    |
| connect_use_tempfile            | AUTO                  |
| innodb_encrypt_temporary_tables | OFF                   |
| innodb_temp_data_file_path      | ibtmp1:12M:autoextend |                     =&amp;gt; 12MB씩 자동 증가된다.
| mysql56_temporal_format         | ON                    |
+---------------------------------+-----------------------+




## 데이터 파일 디렉토리에 저장된다.
[root@kovea-db1 data]# ll
total 373284
-rw-r----- 1 mysql mysql  14262272 Oct 24 11:04 aria_log.00000001
-rw-r----- 1 mysql mysql        52 Oct 24 11:04 aria_log_control
-rw-rw---- 1 mysql mysql   7199789 Feb 23  2022 ib_buffer_pool
-rw-r----- 1 mysql mysql 348127232 Oct 24 11:04 ibdata1
-rw-rw---- 1 mysql mysql  12582912 Feb 23  2022 ibtmp1
drwx------ 2 mysql mysql      4096 Jun 15 08:31 mysql
drwx------ 2 mysql mysql        20 Jan 11  2022 performance_schema
drwx------ 2 mysql mysql       114 Jan 11  2022 test
-rw-r----- 1 mysql mysql       625 Jan 11  2022 xtrabackup_info



[root@jhtest data]# du -sh ./ibtmp1
12M    ./ibtmp1




mysql&amp;gt; show variables like '%innodb_temp_tablespaces_dir%';
+-----------------------------+-----------------+
| Variable_name               | Value           |
+-----------------------------+-----------------+
| innodb_temp_tablespaces_dir | ./#innodb_temp/ |
+-----------------------------+-----------------+&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■&amp;nbsp;ibtmp1 ( global temporary tablespace )&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;GLOBAL TEMPORARY TABLESPACE로 사용자가 생성한 임시 테이블이 생성된다.&lt;/div&gt;
&lt;div&gt;temporary tablespace의 데이터파일 사이즈는 12M로 시작하여 필요시 계속 늘어난다.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;사용하는만큼 늘어나며 이후 사용하지 않는 상황에서도 해당 공간을 반환하지 않고 점유합니다. 반환을 위해서는&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;Restart&lt;/span&gt;&lt;/b&gt;&lt;span&gt;가 필요합니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;## Temporary tablespace 사용량 확인&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1667616224198&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; SELECT FILE_NAME, TABLESPACE_NAME, ENGINE, INITIAL_SIZE, TOTAL_EXTENTS*EXTENT_SIZE AS TotalSizeBytes, DATA_FREE, MAXIMUM_SIZE FROM INFORMATION_SCHEMA.FILES
WHERE TABLESPACE_NAME = 'innodb_temporary'\G
*************************** 1. row ***************************
      FILE_NAME: ./ibtmp1
TABLESPACE_NAME: innodb_temporary
         ENGINE: InnoDB
   INITIAL_SIZE: 12582912
TotalSizeBytes: 12582912
      DATA_FREE: 6291456
   MAXIMUM_SIZE: NULL
1 row in set (0.00 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;## Max 제한 설정&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;temp table 을 생성을 유발하는 long query 로 인해 기하급수적으로 사이즈가 늘게 되면&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;Disk Full 장애&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;를 유발할 수 있습니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;쿼리가 수행 도중에 MAX 에 도달하게 되면 table is full 에러를 내면서 쿼리는 실패됩니다. 하지만 무제한으로 tablespace 를 제공할 수는 없기 때문에 적절한 사이즈를 정해야 합니다.&lt;/div&gt;
&lt;div&gt;뒤에 max값을 적절한 수치로 설정하여 disk full장애를 예방할 수 있습니다.&lt;/div&gt;
&lt;pre id=&quot;code_1667616287371&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[mysqld] 
innodb_temp_data_file_path=ibtmp1:12M:autoextend:max:500M&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;a href=&quot;https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&amp;amp;blogId=sory1008&amp;amp;logNo=221381987533&quot;&gt;https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&amp;amp;blogId=sory1008&amp;amp;logNo=221381987533&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1667616307692&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[MySQL Internals] Temporary Tablespace&quot; data-og-description=&quot;개요 압축되지 않고 사용자가 생성한 임시 테이블과 디스크에 생성되는 내부적인 임시 테이블들이 shared t...&quot; data-og-host=&quot;blog.naver.com&quot; data-og-source-url=&quot;https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&amp;amp;blogId=sory1008&amp;amp;logNo=221381987533&quot; data-og-url=&quot;https://blog.naver.com/sory1008/221381987533&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b1AZTw/hyQsdBmkUU/B7VocOnUdKeZkiAaNiFtD0/img.png?width=270&amp;amp;height=270&amp;amp;face=0_0_270_270&quot;&gt;&lt;a href=&quot;https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&amp;amp;blogId=sory1008&amp;amp;logNo=221381987533&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&amp;amp;blogId=sory1008&amp;amp;logNo=221381987533&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b1AZTw/hyQsdBmkUU/B7VocOnUdKeZkiAaNiFtD0/img.png?width=270&amp;amp;height=270&amp;amp;face=0_0_270_270');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[MySQL Internals] Temporary Tablespace&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;개요 압축되지 않고 사용자가 생성한 임시 테이블과 디스크에 생성되는 내부적인 임시 테이블들이 shared t...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;blog.naver.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>DataBase Admin/DB Admin</category>
      <category>memory부족 이슈</category>
      <category>mysql</category>
      <category>temporary tablespace</category>
      <author>jeonghyun</author>
      <guid isPermaLink="true">https://jhdatabase.tistory.com/120</guid>
      <comments>https://jhdatabase.tistory.com/entry/MySQL-Temporary-Tablespace#entry120comment</comments>
      <pubDate>Sat, 5 Nov 2022 11:46:18 +0900</pubDate>
    </item>
    <item>
      <title>[MySQL - Error 2013/Error 2006]</title>
      <link>https://jhdatabase.tistory.com/entry/MySQL-MariaDB-Error-2013Error-2006</link>
      <description>&lt;div&gt;&lt;b&gt;&lt;span&gt;&lt;/span&gt;&lt;/b&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;Error&amp;nbsp;2013&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ 에러 발생&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;데이터 이관 중 export시 발생&lt;/b&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1666067536885&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@localhost data]# mysqldump -u kim-p --routines --triggers  --single-transaction kim --events &amp;gt; /dump/dump.sql
mysqldump: Error 2013: Lost connection to MySQL server during query when dumping table `***` at row: 167770&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ 발생 이유&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;2013은 서버 연결이 끊어 졌음을 의미&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #212529;&quot;&gt;1. 누군가 세션을 kill하여 발생할 수 있습니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #212529;&quot;&gt;2.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #212529;&quot;&gt;네트워크 문제로 인해 연결이 끊어져서 발생 할 수 있습니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #212529;&quot;&gt;3. 서버 내 충돌이 일어나 끊길 수 있습니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #212529;&quot;&gt;4.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #212529;&quot;&gt;연결이 유휴 상태 wait_timeout이며 종료될 수 있습니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #212529;&quot;&gt;3.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #212529;&quot;&gt;클라이언트가 데이터를 충분히 빨리 가져 오지 못하고 종료되어 net_wait_timeout될 수 있습니다.&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #212529;&quot;&gt;■ 조치 방법&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #212529;&quot;&gt;아래 네트워크 timeout을 재설정 한뒤 export 재시도&lt;/span&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1666067567087&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;MySQL [(none)]&amp;gt; show variables like 'net_read_timeout%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| net_read_timeout | 30    |
+------------------+-------+
1 row in set (0.01 sec)

MySQL [(none)]&amp;gt; show variables like 'net_write_timeout%';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| net_write_timeout | 60    |
+-------------------+-------+
1 row in set (0.00 sec)



MySQL [(none)]&amp;gt; set global net_read_timeout = 10800;
MySQL [(none)]&amp;gt; set global net_write_timeout = 10800;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;Error 2006&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;■ 에러 발생&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;데이터 이관 중 import를 하다가 중간에 아래와 같은 에러가 발생하고 중단되었다.&lt;/b&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1666067670317&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@localhost data]# mysql -uroot -p kim &amp;lt; dump.sql
ERROR 2006 (HY000) at line 19232: MySQL server has gone away&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;## 에러 로그&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1666067683320&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;2022-10-17T23:58:04.143584Z 0 [Note] InnoDB: Buffer pool(s) load completed at 221018  8:58:04
2022-10-17T23:58:04.160959Z 0 [Note] Server hostname (bind-address): '*'; port: 3306
2022-10-17T23:58:04.162289Z 0 [Note] IPv6 is available.
2022-10-17T23:58:04.162317Z 0 [Note]   - '::' resolves to '::';
2022-10-17T23:58:04.162366Z 0 [Note] Server socket created on IP: '::'.
2022-10-17T23:58:04.175732Z 0 [Note] Event Scheduler: Loaded 0 events
2022-10-17T23:58:04.175840Z 0 [Note] /mysql/bin/mysqld: ready for connections.
Version: '5.7.34'  socket: '/tmp/mysql.sock'  port: 3306  MySQL Community Server (GPL)
2022-10-18T00:13:56.590061Z 4 [Note] Aborted connection 4 to db: 'kim' user: 'root' host: 'localhost' (Got a packet bigger than 'max_allowed_packet' bytes)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;■ 발생 이유&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #212529;&quot;&gt;1. 서버 연결이 끊어졌거나 실행중에 서버가 죽었을 때 등 서버와의 연결에 문제가 생겼을 때 발생합니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #212529;&quot;&gt;2. 부적절하거나 너무 큰 쿼리를 보냈을 때. 이 경우 데이터베이스는 뭔가가 잘못됐다고 판단하고 연결을 끊습니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #212529;&quot;&gt;3. 이전 연결 세션에 영향을 받은 경우 끊길 수 있습니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #212529;&quot;&gt;&lt;b&gt;■ 조치 방법&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #212529;&quot;&gt;max_allowed_packet 파라미터를 재설정하여 쿼리 제한을 증가시켜줍니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #212529;&quot;&gt;설정된 용량보다 더 큰 패킷을 받으면 위의 에러가 발생합니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #212529;&quot;&gt;패킷이란 mysql서버에 보내는 sql문의 단위입니다.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1666067733737&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;## 기존 설정 (기본값인 4MB)
mysql&amp;gt; show variables like 'max_allowed_packet';
+--------------------+---------+
| Variable_name      | Value   |
+--------------------+---------+
| max_allowed_packet | 4194304 |
+--------------------+---------+
1 row in set (0.00 sec)


## MySQL 5.7 서버의 최대 패킷 용량인 1GB로 설정
mysql&amp;gt; set global max_allowed_packet=1073741824;
Query OK, 0 rows affected (0.00 sec)


## Import 재시작
[root@localhost data]# mysql -uroot -p  kim &amp;lt; dump.sql&lt;/code&gt;&lt;/pre&gt;</description>
      <category>DataBase Admin/Trouble shooting</category>
      <category>error 2006</category>
      <category>error 2013</category>
      <category>mysql</category>
      <category>mysqldump</category>
      <author>jeonghyun</author>
      <guid isPermaLink="true">https://jhdatabase.tistory.com/119</guid>
      <comments>https://jhdatabase.tistory.com/entry/MySQL-MariaDB-Error-2013Error-2006#entry119comment</comments>
      <pubDate>Tue, 18 Oct 2022 13:40:31 +0900</pubDate>
    </item>
    <item>
      <title>[MySQL - QPS/TPS]</title>
      <link>https://jhdatabase.tistory.com/entry/MySQL-MariaDB-QPSTPS</link>
      <description>&lt;div&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;■ QPS&amp;nbsp; ( Query Per Seconds )&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;초당 Query량 즉, MySQL Server가 초당 실행하는 Query 총량을 말합니다.&amp;nbsp; &lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;nbsp;&lt;/span&gt;조회량 /초 는 한서버가 1초에 해당하는 조회 횟수로 특정한 조회 서버가 규정된 시간 내에 처리하는 조회량이 얼마인지에 대한 평가 기준입니다.&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;※ 계산 방법&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1666056418101&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Questions = SHOW GLOBAL STATUS LIKE 'Questions';
Uptime = SHOW GLOBAL STATUS LIKE 'Uptime';
QPS=Questions/Uptime

MariaDB [(none)]&amp;gt; SHOW GLOBAL STATUS LIKE 'Questions';
+---------------+------------+
| Variable_name | Value      |
+---------------+------------+
| Questions     | 2382377890 |
+---------------+------------+
1 row in set (0.00 sec)


MariaDB [(none)]&amp;gt; SHOW GLOBAL STATUS LIKE 'Uptime';
+---------------+---------+
| Variable_name | Value   |
+---------------+---------+
| Uptime        | 9197011 |
+---------------+---------+
1 row in set (0.00 sec)


MariaDB [(none)]&amp;gt; select 2382377890/9197011 as QPS from dual;
+----------+
| QPS      |
+----------+
| 259.0383 |
+----------+
1 row in set (0.00 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;■ TPS ( Transaction Per Seconds )&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;무 수/초 입니다. 데이터베이스 서버가 단위 시간 내에 처리하는 업무의 개수입니다.&lt;/div&gt;
&lt;div&gt;데이터베이스에 대한 성능 모니터링에서는 QPS 와 TPS를 자주 말합니다.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;초당 사무량은 다음과 같은 방식으로 클라이언트 응용 프로그램이 요청한 TPS 값을 얻을 수 있습니다.&amp;nbsp;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;※ 계산 방법&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1666056444499&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Com_commit = SHOW GLOBAL STATUS LIKE 'Com_commit';
Com_rollback = SHOW GLOBAL STATUS LIKE 'Com_rollback';
Uptime = SHOW GLOBAL STATUS LIKE 'Uptime';
TPS=(Com_commit + Com_rollback)/Uptime


MariaDB [(none)]&amp;gt; SHOW GLOBAL STATUS LIKE 'Com_commit';
+---------------+-----------+
| Variable_name | Value     |
+---------------+-----------+
| Com_commit    | 479706437 |
+---------------+-----------+
1 row in set (0.00 sec)


MariaDB [(none)]&amp;gt; SHOW GLOBAL STATUS LIKE 'Com_rollback';
+---------------+--------+
| Variable_name | Value  |
+---------------+--------+
| Com_rollback  | 219745 |
+---------------+--------+
1 row in set (0.00 sec)


MariaDB [(none)]&amp;gt; SHOW GLOBAL STATUS LIKE 'Uptime';
+---------------+---------+
| Variable_name | Value   |
+---------------+---------+
| Uptime        | 9197369 |
+---------------+---------+
1 row in set (0.01 sec)


MariaDB [(none)]&amp;gt; select (479706437+219745)/9197369 as TPS from dual;
+---------+
| TPS     |
+---------+
| 52.1808 |
+---------+
1 row in set (0.00 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://intrepidgeeks.com/tutorial/significance-and-calculation-method-of-qps-and-tps-in-mysql-database&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://intrepidgeeks.com/tutorial/significance-and-calculation-method-of-qps-and-tps-in-mysql-database&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1666056506240&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Mysql 데이터베이스 의 QPS 와 TPS 의 의미 와 계산 방법&quot; data-og-description=&quot;Redis 모니터링 Redis 모니터링 클라이언트와 서버가 정상적으로 연결되어 PONG을 반환합니다. Redis 모니터링의 가장 직접적인 방법은 시스템이 제공하는 info 명령을 사용하는 것이다. 다음 명령을 &quot; data-og-host=&quot;intrepidgeeks.com&quot; data-og-source-url=&quot;https://intrepidgeeks.com/tutorial/significance-and-calculation-method-of-qps-and-tps-in-mysql-database&quot; data-og-url=&quot;https://intrepidgeeks.com/tutorial/significance-and-calculation-method-of-qps-and-tps-in-mysql-database&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://intrepidgeeks.com/tutorial/significance-and-calculation-method-of-qps-and-tps-in-mysql-database&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://intrepidgeeks.com/tutorial/significance-and-calculation-method-of-qps-and-tps-in-mysql-database&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Mysql 데이터베이스 의 QPS 와 TPS 의 의미 와 계산 방법&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Redis 모니터링 Redis 모니터링 클라이언트와 서버가 정상적으로 연결되어 PONG을 반환합니다. Redis 모니터링의 가장 직접적인 방법은 시스템이 제공하는 info 명령을 사용하는 것이다. 다음 명령을&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;intrepidgeeks.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>DataBase Admin/DB Admin</category>
      <category>mysql</category>
      <category>QPS</category>
      <category>tps</category>
      <author>jeonghyun</author>
      <guid isPermaLink="true">https://jhdatabase.tistory.com/118</guid>
      <comments>https://jhdatabase.tistory.com/entry/MySQL-MariaDB-QPSTPS#entry118comment</comments>
      <pubDate>Tue, 18 Oct 2022 10:28:28 +0900</pubDate>
    </item>
    <item>
      <title>[MySQL - Character set &amp;amp; Collation]</title>
      <link>https://jhdatabase.tistory.com/entry/MySQL-MariaDB-Character-set-Collation</link>
      <description>&lt;div&gt;&lt;b&gt;&lt;span&gt;Character Set이란,&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;캐릭터 셋을 명시적으로 설정하지 않으면 MySQL 5.7 이하는&amp;nbsp;&amp;nbsp;latin1, MySQL 8은 utf8mb4 가 된다.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;현재 character set 확인은 다음과 같이 mysql 클라이언트로 연결한 후에 status 명령어로 알수 있다.&lt;/div&gt;
&lt;div&gt;문자의 집합으로 즉, 텍스트 데이터에 대한 저장공간의 크기를 지정하기 위함이다.&lt;/div&gt;
&lt;div&gt;대표적으로는 utf8, euckr 그리고 utf8mb4가 있다.&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;Collation이란,&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;정렬방식으로 저장된 텍스트 데이터를 정렬할 경우 어떻게 비교하여 정렬할 것인가에 대해 지정하기 위함이다.&lt;/div&gt;
&lt;div&gt;&quot;ORDER BY 'text' ASC&quot;에 대해 데이터로 a, b, A, B가 있을 경우 어떤 방식으로 비교하여 정렬을 할 것인가를 지정하는 것이다.&lt;/div&gt;
&lt;div&gt;주로 많이 사용되는 collation은 utf8_bin(or utf8mb4), utf8_general_ci(or utf8mb4_general_ci) 그리고 utf8_unicode_ci(or utf8mb4_unocode_ci)가 있다.&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ utf8 VS utf8mb4&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;utf8은 utf8mb3로 3바이트 가변 자료형이다.&lt;/div&gt;
&lt;div&gt;대부분 언어는 utf8 자료형으로 저장하는데 문제가 없으나 최근에 나온 문자열 중 대표적으로 Emoji를 utf8에 저장하면 값이 소실되는 현상이 발생하여 나온 자료형이 utf8mb4로 4바이트 가변 자료형이다.&lt;/div&gt;
&lt;div&gt;redmine, gitlab 등 거의 모든 app 들은 character set 으로 UTF-8 을 권장하고 있고 실제로도 UTF-8 을 사용하는게 좋습니다.&lt;/div&gt;
&lt;div&gt;※ MySQL 은 UTF-8 은 3 byte 문자밖에 표시하지 못하므로 아래에서 설명할 utf8mb4 인코딩을 사용하는 것을 권장합니다.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ 설정&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;u&gt;&lt;b&gt;&lt;span&gt;MySQL 8.0 이상&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;&lt;/div&gt;
&lt;div&gt;MySQL 8 은 기본 character set 과 collation 이 utf8mb4과 utf8mb4_0900_ai_ci이므로 별도 설정 불필요&lt;/div&gt;
&lt;div&gt;&lt;u&gt;&lt;b&gt;&lt;span&gt;MySQL 5.5이상&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;&lt;/div&gt;
&lt;div&gt;MySQL 5.5 부터는 default-character-set 옵션이 제거되었고 character-set-server 만 설정해 주면 됩니다.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;MySQL 은 UTF-8 구현을 대충 해서 3 Byte 밖에 표현을 못하는 문제가 있었는데 Emoji 가 활성화되면서 4 byte 로 표현해야 하는 UTF-8 문자들에 대한 요구 증가, 다른 DBMS 와는 달리 MySQL 은 utf8mb4 라는 4byte 를 표현하는 새로운 캐릭터 셋을 만들었으나 Emoji 나 기타 4 byte 로 인코딩하는 UTF-8 문자를 MySQL 에 저장하려면&amp;nbsp;&amp;nbsp;utf8mb4 인코딩을 사용 필요. (MySQL 5.5.3 이상 필요)&lt;/div&gt;
&lt;div&gt;utf8mb4 캐릭터 셋은 오직 MySQL 에만 해당되는 문제이고 다른 DBMS 는 아예 utf8mb4 라는 캐릭터 셋이 없으며 보통 인코딩을 UTF-8 로 설정하면 됩니다.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ 확인 방법&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1666056151325&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;MariaDB [(none)]&amp;gt; status
--------------
mysql  Ver 15.1 Distrib 10.2.12-MariaDB, for Linux (x86_64) using readline 5.1

Connection id:        156
Current database:    
Current user:        root@localhost
SSL:            Not in use
Current pager:        stdout
Using outfile:        ''
Using delimiter:    ;
Server:            MariaDB
Server version:        10.2.12-MariaDB MariaDB Server
Protocol version:    10
Connection:        Localhost via UNIX socket
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    utf8
Conn.  characterset:    utf8
UNIX socket:        /tmp/mysql.sock
Uptime:            26 days 2 hours 55 min 17 sec

Threads: 7  Questions: 27968371  Slow queries: 0  Opens: 1387  Flush tables: 2  Open tables: 451  Queries per second avg: 12.392
--------------



MariaDB [(none)]&amp;gt; show variables like '%character%';
+--------------------------+------------------------+
| Variable_name            | Value                  |
+--------------------------+------------------------+
| character_set_client     | utf8                   |
| character_set_connection | utf8                   |
| character_set_database   | latin1                 |
| character_set_filesystem | binary                 |
| character_set_results    | utf8                   |
| character_set_server     | latin1                 |
| character_set_system     | utf8                   |
| character_sets_dir       | /mysql/share/charsets/ |
+--------------------------+------------------------+
8 rows in set (0.00 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ 변경 방법&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span style=&quot;background-color: #fefefe; color: #000c34;&quot;&gt;MySQL 5.7 이하 character set 변경&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1666056236191&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ALTER DATABASE homestead CHARACTER SET = utf8mb4;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;MySQL 8 에 새로 도입된 utf8mb4_0900_ai_ci Collation 을 사용하도록 변경할 수 있지만 collation 변경은 Primary key, unique constraint 등 여러 부분에 영향을 미치므로 주의해서 변경해야 한다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;MySQL 5.7 이상 character set 변경&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1666056241235&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ALTER DATABASE homestead CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;</description>
      <category>DataBase Admin/DB Admin</category>
      <category>character set</category>
      <category>collation</category>
      <category>MariaDB</category>
      <category>mysql</category>
      <author>jeonghyun</author>
      <guid isPermaLink="true">https://jhdatabase.tistory.com/116</guid>
      <comments>https://jhdatabase.tistory.com/entry/MySQL-MariaDB-Character-set-Collation#entry116comment</comments>
      <pubDate>Tue, 18 Oct 2022 10:24:27 +0900</pubDate>
    </item>
    <item>
      <title>[MySQL - Parameter 정리]</title>
      <link>https://jhdatabase.tistory.com/entry/MySQL-MariaDB-Parameter-%EC%A0%95%EB%A6%AC</link>
      <description>&lt;div&gt;&lt;span&gt;파라미터 설명 Docs URL&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://dev.mysql.com/doc/refman/8.0/en/server-option-variable-reference.html&quot;&gt;https://dev.mysql.com/doc/refman/8.0/en/server-option-variable-reference.html&lt;/a&gt;
&lt;figure id=&quot;og_1666054744159&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;MySQL :: MySQL 8.0 Reference Manual :: 5.1.4 Server Option, System Variable, and Status Variable Reference&quot; data-og-description=&quot;MySQL 8.0 Reference Manual &amp;nbsp;/&amp;nbsp; ... &amp;nbsp;/&amp;nbsp; MySQL Server Administration &amp;nbsp;/&amp;nbsp; The MySQL Server &amp;nbsp;/&amp;nbsp; Server Option, System Variable, and Status Variable Reference 5.1.4&amp;nbsp;Server Option, System Variable, and Status Variable Reference The following table lists&quot; data-og-host=&quot;dev.mysql.com&quot; data-og-source-url=&quot;https://dev.mysql.com/doc/refman/8.0/en/server-option-variable-reference.html&quot; data-og-url=&quot;https://dev.mysql.com/doc/refman/8.0/en/server-option-variable-reference.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://dev.mysql.com/doc/refman/8.0/en/server-option-variable-reference.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://dev.mysql.com/doc/refman/8.0/en/server-option-variable-reference.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;MySQL :: MySQL 8.0 Reference Manual :: 5.1.4 Server Option, System Variable, and Status Variable Reference&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;MySQL 8.0 Reference Manual &amp;nbsp;/&amp;nbsp; ... &amp;nbsp;/&amp;nbsp; MySQL Server Administration &amp;nbsp;/&amp;nbsp; The MySQL Server &amp;nbsp;/&amp;nbsp; Server Option, System Variable, and Status Variable Reference 5.1.4&amp;nbsp;Server Option, System Variable, and Status Variable Reference The following table lists&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;dev.mysql.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://dev.mysql.com/doc/refman/8.0/en/innodb-parameters.html#sysvar_innodb_log_file_size&quot;&gt;https://dev.mysql.com/doc/refman/8.0/en/innodb-parameters.html#sysvar_innodb_log_file_size&lt;/a&gt;
&lt;figure id=&quot;og_1666054746420&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;MySQL :: MySQL 8.0 Reference Manual :: 15.14 InnoDB Startup Options and System Variables&quot; data-og-description=&quot;&quot; data-og-host=&quot;dev.mysql.com&quot; data-og-source-url=&quot;https://dev.mysql.com/doc/refman/8.0/en/innodb-parameters.html#sysvar_innodb_log_file_size&quot; data-og-url=&quot;https://dev.mysql.com/doc/refman/8.0/en/innodb-parameters.html#sysvar_innodb_log_file_size&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://dev.mysql.com/doc/refman/8.0/en/innodb-parameters.html#sysvar_innodb_log_file_size&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://dev.mysql.com/doc/refman/8.0/en/innodb-parameters.html#sysvar_innodb_log_file_size&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;MySQL :: MySQL 8.0 Reference Manual :: 15.14 InnoDB Startup Options and System Variables&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;dev.mysql.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;파라미터 권장값 MOS URL : Recommended Settings for MySQL 5.6, 5.7, 8.0 Server for Online Transaction Processing (OLTP) and Benchmarking (Doc ID 1531329.1)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;■ table_open_cache&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;모든 스레드에 대해 열려 있는 테이블의 수입니다.&lt;/span&gt;&lt;/div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;동적&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;예&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;기본값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4000&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;최소값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;최대값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;524288&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div&gt;&lt;span&gt;※&lt;/span&gt;&amp;nbsp;테이블 캐시 적중률 확인&lt;/div&gt;
&lt;div&gt;일반적으로 50% 이상이어야 합니다. 낮을 시 값을 늘릴 필요가 있다.&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt;
&lt;pre id=&quot;code_1666055457572&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Table cache hit rate = table_open_cache*100/Opened_tables.  
                 = 2000*100/482099
                 = 0.41%


mysql&amp;gt; show global status  like 'open%';
+--------------------------+---------+
| Variable_name            | Value   |
+--------------------------+---------+
| Open_files               | 1583    |
| Open_streams             | 0       |
| Open_table_definitions   | 1400    |
| Open_tables              | 2000    |
| Opened_files             | 2619222 |
| Opened_table_definitions | 110583  |
| Opened_tables            | 482099  |
+--------------------------+---------+
7 rows in set (0.00 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt;
&lt;div&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;■ open-files-limit&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;# mysql이 오픈할수 있는 file(정확히는 file descripter)개수&lt;/div&gt;
&lt;div&gt;# 가능하면 5000으로 설정하는데 OS limit에 따라 재조정 될수 있다&lt;/div&gt;
&lt;div&gt;# 실제로는 이 값에 영향을 받지 않고, OS의 nofile(open files) 제한이 적용됨&lt;/div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;동적&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;아니&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;기본값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;5000, with possible adjustment&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;최소값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;0&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;최대값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;platform dependent&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;※ 공식&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;pre id=&quot;code_1666055503654&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;일반적으로 table_open_cache의 2배

open_files_limit= Table_open_cache*2&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;■&amp;nbsp;table_open_cache_instances&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;열린 테이블 캐시 인스턴스의 수입니다.&lt;/span&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;동적&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;아니&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;기본값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;16&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;최소값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;최대값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;64&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;16개 이상의 코어를 일상적으로 사용하는 시스템에서는 8 또는 16 값을 사용하는 것이 좋습니다&lt;/span&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;그러나 높은 메모리 로드를 유발하는 테이블에 많은 큰 트리거가 있는 경우 에 대한 기본 설정으로&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;&amp;nbsp;&lt;/span&gt;table_open_cache_instances&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;인해 과도한 메모리 사용이 발생할 수 있습니다.&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;이러한 상황에서&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;&amp;nbsp;&lt;/span&gt;table_open_cache_instances&lt;span style=&quot;color: #555555;&quot;&gt;메모리 사용을 제한하기 위해 1로 설정하는 것이 도움이 될 수 있습니다.&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;■&amp;nbsp;block_encryption_mode&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;이 변수는 AES와 같은 블록 기반 알고리즘에 대한 블록 암호화 모드를 제어합니다.&amp;nbsp;&lt;/span&gt; &lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;값은 대소문자를 구분하지 않습니다.&lt;/span&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;block_encryption_mode&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;지원되지 않는 키 길이 또는 SSL 라이브러리가 지원하지 않는 모드를 포함하는 값&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #555555;&quot;&gt;으로 설정하려고 하면 오류가 발생합니다 .&lt;/span&gt;&lt;/div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;동적&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;예&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;유형&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;끈&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;기본값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;aes-128-ecb&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;■&amp;nbsp;max_allowed_packet&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;한 패킷의 최대 크기&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;하나의 패킷 또는 생성된/중간 문자열 또는&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;mysql_stmt_send_long_data()&lt;/span&gt;&lt;span style=&quot;color: #555555;&quot;&gt;C API 함수에서 보낸 매개변수의 최대 크기입니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;BLOB&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;큰 열이나 긴 문자열&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;을 사용하는 경우 이 값을 늘려야 합니다&lt;/span&gt; .&lt;/span&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;BLOB&lt;/span&gt;&lt;span style=&quot;color: #555555;&quot;&gt;사용하려는&lt;/span&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;최대 크기만큼 커야 합니다&lt;/span&gt;.&lt;/span&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #555555;&quot;&gt;프로토콜 제한&lt;/span&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&amp;nbsp;&lt;/span&gt;max_allowed_packet&lt;span style=&quot;color: #555555;&quot;&gt;은 1GB입니다.&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #555555;&quot;&gt;값은 1024의 배수여야 합니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span style=&quot;color: #555555;&quot;&gt;※&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;BLOB&lt;/span&gt;&lt;span style=&quot;color: #555555;&quot;&gt;(Binary Large Object) : 이진파일인 이미지 등 형태의 파일 크기를 4GB까지 지원&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;CLOB&lt;/span&gt;&lt;span style=&quot;color: #555555;&quot;&gt;(Character Large Object) : 텍스트형태파일 크기를 4GB까지 지원&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;동적&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;예&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;기본값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;67108864&lt;/span&gt;&lt;span style=&quot;color: #555555;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #555555;&quot;&gt;64MB)&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;최소값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1024&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;최대값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1073741824&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;단위&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;바이트&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;블록 크기&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1024&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;■&amp;nbsp;sql-mode&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;동적으로 설정할 수 있는 현재 서버 SQL 모드입니다.&lt;/span&gt;&lt;/div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;동적&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;예&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;기본값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ONLY_FULL_GROUP_BY STRICT_TRANS_TABLES NO_ZERO_IN_DATE NO_ZERO_DATE ERROR_FOR_DIVISION_BY_ZERO NO_ENGINE_SUBSTITUTION&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;변경 가능 값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ALLOW_INVALID_DATES&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ANSI_QUOTES&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ERROR_FOR_DIVISION_BY_ZERO&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;HIGH_NOT_PRECEDENCE&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;IGNORE_SPACE&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;NO_AUTO_VALUE_ON_ZERO&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;NO_BACKSLASH_ESCAPES&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;NO_DIR_IN_CREATE&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;NO_ENGINE_SUBSTITUTION&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;NO_UNSIGNED_SUBTRACTION&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;NO_ZERO_DATE&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;NO_ZERO_IN_DATE&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ONLY_FULL_GROUP_BY&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;PAD_CHAR_TO_FULL_LENGTH&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;PIPES_AS_CONCAT&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;REAL_AS_FLOAT&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;STRICT_ALL_TABLES&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;STRICT_TRANS_TABLES&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;TIME_TRUNCATE_FRACTIONAL&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;■&amp;nbsp;character-set-server&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;서버 기본 문자 집합입니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;보통 기본값으로 쓰는듯하다.&lt;/span&gt;&lt;/div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;동적&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;예&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;유형&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;끈&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;기본값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;utf8mb4&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;■&amp;nbsp;character-set-filesystem&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;파일 시스템 문자 집합입니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;MySQL 8.0.14부터 이 시스템 변수의 세션 값을 설정하는 것은 제한.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;동적&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;예&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;a href=&quot;https://dev.mysql.com/doc/refman/8.0/en/optimizer-hints.html#optimizer-hints-set-var&quot;&gt;SET_VAR&lt;/a&gt;&lt;span style=&quot;color: #555555;&quot;&gt;힌트 적용&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;아니&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;유형&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;끈&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;■&amp;nbsp;collation_server&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;서버 기본 문자 집합입니다.&amp;nbsp;&lt;/span&gt; &lt;span style=&quot;color: #555555;&quot;&gt;이 변수를 설정&lt;/span&gt;&lt;span style=&quot;color: #555555;&quot;&gt;하는 경우 문자 집합에 대한 데이터 정렬을 지정하도록 설정해야 합니다.&lt;/span&gt;&lt;/div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;동적&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;예&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;유형&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;끈&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;기본값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;utf8mb4&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;※&amp;nbsp;&lt;/span&gt; &lt;span style=&quot;color: #555555;&quot;&gt;각 문자 집합에 사용할 수 있는 데이터 정렬을 확인하려면&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;문을 사용하거나 테이블을 쿼리&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #555555;&quot;&gt;합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1666055671220&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; SHOW COLLATION where Charset='UTF8';
+--------------------------+---------+-----+---------+----------+---------+
| Collation                | Charset | Id  | Default | Compiled | Sortlen |
+--------------------------+---------+-----+---------+----------+---------+
| utf8_general_ci          | utf8    |  33 | Yes     | Yes      |       1 |
| utf8_bin                 | utf8    |  83 |         | Yes      |       1 |
| utf8_unicode_ci          | utf8    | 192 |         | Yes      |       8 |
| utf8_icelandic_ci        | utf8    | 193 |         | Yes      |       8 |
| utf8_latvian_ci          | utf8    | 194 |         | Yes      |       8 |
| utf8_romanian_ci         | utf8    | 195 |         | Yes      |       8 |
| utf8_slovenian_ci        | utf8    | 196 |         | Yes      |       8 |
| utf8_polish_ci           | utf8    | 197 |         | Yes      |       8 |
| utf8_estonian_ci         | utf8    | 198 |         | Yes      |       8 |
| utf8_spanish_ci          | utf8    | 199 |         | Yes      |       8 |
| utf8_swedish_ci          | utf8    | 200 |         | Yes      |       8 |
| utf8_turkish_ci          | utf8    | 201 |         | Yes      |       8 |
| utf8_czech_ci            | utf8    | 202 |         | Yes      |       8 |
| utf8_danish_ci           | utf8    | 203 |         | Yes      |       8 |
| utf8_lithuanian_ci       | utf8    | 204 |         | Yes      |       8 |
| utf8_slovak_ci           | utf8    | 205 |         | Yes      |       8 |
| utf8_spanish2_ci         | utf8    | 206 |         | Yes      |       8 |
| utf8_roman_ci            | utf8    | 207 |         | Yes      |       8 |
| utf8_persian_ci          | utf8    | 208 |         | Yes      |       8 |
| utf8_esperanto_ci        | utf8    | 209 |         | Yes      |       8 |
| utf8_hungarian_ci        | utf8    | 210 |         | Yes      |       8 |
| utf8_sinhala_ci          | utf8    | 211 |         | Yes      |       8 |
| utf8_german2_ci          | utf8    | 212 |         | Yes      |       8 |
| utf8_croatian_ci         | utf8    | 213 |         | Yes      |       8 |
| utf8_unicode_520_ci      | utf8    | 214 |         | Yes      |       8 |
| utf8_vietnamese_ci       | utf8    | 215 |         | Yes      |       8 |
| utf8_general_mysql500_ci | utf8    | 223 |         | Yes      |       1 |
+--------------------------+---------+-----+---------+----------+---------+
27 rows in set (0.00 sec)



unicode VS general
* utf8mb4_unicode_ci 범용 정렬 및 비교에 대한 공식 유니 코드 규칙을 기반으로하며 광범위한 언어로 정확하게 정렬됩니다.
* utf8mb4_general_ci는 속도를 높이기 위해 설계된 많은 단축키를 사용하면서 할 수있을뿐만 아니라 할 수있는 단순한 정렬 규칙 세트입니다. 유니 코드 규칙을 따르지 않으며 특정 언어 나 문자를 사용할 때와 같은 일부 상황에서는 원하지 않는 정렬이나 비교가 발생합니다.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;■&amp;nbsp;skip-character-set-client-handshake&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;클라이언트에서 보내지는 문자셋 정보를 무시하고 서버의 문자셋 사용&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #d100ff;&quot;&gt;■ max_connections&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span style=&quot;background-color: #fdfdfd; color: #000000;&quot;&gt;허용된 최대 동시 클라이언트 연결 수입니다. 최대 유효 값은 open_files_limit - 810의 유효 값과 max_connections에 대해 실제로 설정된 값 중 작은 값입니다.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;운영 체제의 SOFT 및 HARD 제한을 조정하고 MySQL에서 더 높은 값의 open_files_limit를 설정하는 것을 고려합니다(5000이 기본 제한임).&amp;nbsp; =&amp;gt;OS단에서&amp;nbsp;&lt;/span&gt;&lt;span&gt;open_files_limit를 설정&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;응용 프로그램이 데이터베이스에 대한&lt;/span&gt; &lt;span&gt;연결을 올바르게 닫지 않는 경우가 매우 빈번하다는 점을 유의&lt;/span&gt;&lt;span&gt;해야 합니다. =&amp;gt; 개발단에서 close를 제대로 안할 경우&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;애플리케이션 수준에서&lt;/span&gt; &lt;span&gt;연결 풀을 사용하면 여기에서 문제를 해결하는 데 도움&lt;/span&gt;&lt;span&gt;이 될 수 있습니다. =&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #3665ee;&quot;&gt;WAS단에서 컨넥션풀 사용이 도움이 된다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;커넥션 개수를 늘릴때 thread_cache 값도 영향을 미친다.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;동적&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;예&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;유형&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;정수&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;기본값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;151&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;최소값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;pre id=&quot;code_1666055716540&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;에러 로그에 Too many connections 오류 발생


mysql&amp;gt; show status like 'Aborted%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| Aborted_clients  | 4     |
| Aborted_connects | 1     |
+------------------+-------+
2 rows in set (0.00 sec)

늘어나면 날수록 메모리가 고갈되고 스케줄링 오버헤드도 증가
이전 최대 접속자 수의 2배 정도 잡는다.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;■&amp;nbsp;max_connect_errors&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;계속적으로 문제를 발생시키는 클라이언트를 몇번째 재시도후 block할지 지정&lt;/div&gt;
&lt;div&gt;한번 block되면, 서버를 재시작하거나 flush host명령을 실행하기 전까지 접속 불가&lt;/div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;동적&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;예&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;기본값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;100&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;최소값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;최대값(32비트 플랫폼)&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4294967295&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;■&amp;nbsp;skip-name-resolve&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span style=&quot;background-color: #fdfdfd; color: #000000;&quot;&gt;클라이언트 연결을 확인할 때 호스트 이름을 확인할지 여부입니다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;background-color: #fdfdfd; color: #000000;&quot;&gt;이 변수가 OFF이면 mysqld는 클라이언트 연결을 확인할 때 호스트 이름을 확인합니다.&lt;/span&gt;&lt;span style=&quot;background-color: #fdfdfd; color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt; &lt;span style=&quot;background-color: #fdfdfd; color: #000000;&quot;&gt;ON인 경우 mysqld는 IP 번호만 사용합니다. 이 경우 허가 테이블의 모든 Host 열 값은 IP 주소여야 합니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;역DNS 검색 비활성화 (IP 기반으로 접속을 하게 되면 hostname lookup 과정 생략)&lt;/span&gt;&lt;/div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;동적&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;아니&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;기본값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;OFF&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;■&amp;nbsp;max_heap_table_size&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;background-color: #fdfdfd; color: #000000;&quot;&gt;사용자 생성 메모리 테이블이 커질 수 있는 최대 크기를 설정합니다. 변수 값은 MEMORY 테이블 MAX_ROWS 값을 계산하는 데 사용됩니다.&amp;nbsp;&lt;/span&gt; &lt;span style=&quot;background-color: #fdfdfd; color: #000000;&quot;&gt;이 변수는 내부 메모리 내 테이블의 크기를 제한하기 위해 tmp_table_size와 함께 사용됩니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;MEMORY 테이블의 최대 크기&lt;/div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;동적&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;예&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;기본값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;16777216&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;최소값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;16384&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;최대값(32비트 플랫폼)&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4294966272&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;단위&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;바이트&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;블록 크기&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1024&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;■&amp;nbsp;tmp_table_size&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;메모리에 생성될 임시 테이블의 최대 크기, 이 값을 초과하면 디스크에 임시 테이블을 씁니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span style=&quot;background-color: #fdfdfd; color: #000000;&quot;&gt;내부 메모리 임시 테이블에 MEMORY 스토리지 엔진을 사용할 때 실제 크기 제한은 tmp_table_size와 max_heap_table_size 중 더 작은 크기입니다.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;동적&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;예&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;기본값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;16777216&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;최소값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1024&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;최대값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;18446744073709551615&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;단위&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;바이트&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;■&amp;nbsp;tmpdir&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;디스크에 임시테이블이 생성될 때 사용될 경로&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;/tmp&lt;/span&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #555555;&quot;&gt;기본 디렉토리가 너무 작아서 임시 테이블을 보관할 수 없는 파티션에 있는&lt;/span&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #555555;&quot;&gt;경우 유용할 수 있습니다 .&lt;/span&gt;&lt;/div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;동적&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;아니&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;유형&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;디렉토리 이름&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #d100ff;&quot;&gt;■&amp;nbsp;&amp;nbsp;innodb_sort_buffer_size&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;동적&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;아니&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;기본값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1048576&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;최소값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;65536&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;최대값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;67108864&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;단위&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;바이트&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div&gt;&lt;span&gt;보조 인덱스를 만들거나 재구성하는 온라인 DDL 작업의 정렬 버퍼 크기&lt;/span&gt;&lt;span&gt;입니다. 그러나 MySQL 8.0.27에서 이 책임은 innodb_ddl_buffer_size 변수에 포함됩니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span style=&quot;background-color: #fdfdfd; color: #000000;&quot;&gt;온라인 DDL 작업 중 동시 DML을 기록할 때 임시 로그 파일이 확장되는 양, 임시 로그 파일 읽기 버퍼 및 쓰기 버퍼의 크기&lt;/span&gt;&lt;span style=&quot;background-color: #fdfdfd; color: #000000;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #d100ff;&quot;&gt;■&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #d100ff;&quot;&gt;innodb_log_file_size&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;로그(redo) 파일 크기&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;일반적으로 (innodb_buffer_pool_size/innodb_log_files_in_group)를 적정 값&lt;/span&gt;&lt;span&gt;으로 봅니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;로그 파일의 결합 크기는 512GB보다 약간 작은 최대값을 초과할 수 없음.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;로그 파일 크기가 클수록 성능이 더 좋지만 충돌 후 복구 시간을 고려해야함.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;드물게 크래시 복구가 발생하는 경우 복구 시간과 피크 작업 중 처리량 최대화의 균형을 맞춰야함.&lt;/span&gt;&lt;/div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;동적&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;아니&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;기본값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;50331648&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;최소값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4194304&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;최대값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;512GB / innodb_log_files_in_group&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;단위&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;바이트&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;※ 권고 값&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1666055817798&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;버퍼 풀이 100기가바이트 이상이고 데이터 수정률이 높은 서버에는 수십 기가바이트 크기가 적합할 수 있지만 대부분의 프로덕션 서버는 몇 기가바이트면 괜찮습니다.


상당한 삽입, 업데이트 및 삭제 활동을 보이는 모든 MySQL 버전에 권장되는 초기 값
innodb_log_file_size = 2047M
innodb_log_files_in_group = 2 innodb_log_file_size * innodb_log_files_in_group&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #d100ff;&quot;&gt;■&amp;nbsp;innodb_log_files_in_group&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;동적&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;아니&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;기본값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;최소값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;최대값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;100&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div&gt;MySQL 8.0.30에서 더 이상 사용되지 않습니다 .&lt;/div&gt;
&lt;div&gt;로그 그룹 의 로그 파일 수입니다 . 순환 방식으로 파일에 씁니다. &lt;span&gt;기본(권장) 값은 2&lt;/span&gt;입니다.&amp;nbsp;로그 파일의 결합 크기( * )는 최대 512GB입니다.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;■&amp;nbsp;innodb_file_per_table&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;동적&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;예&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;기본값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ON&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div&gt;활성화 되면 innodb_file_per_table테이블은 기본적으로 테이블당 파일 테이블스페이스에 생성됩니다. 비활성화하면 기본적으로 시스템 테이블스페이스에 테이블이 생성됩니다.&lt;/div&gt;
&lt;div&gt;&lt;span&gt;테이블 단위로 테이블스페이스 할당, 활성시 테이블별로 .frm, .ibd 각각 생성&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;■&amp;nbsp;innodb_undo_directory&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;동적&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;아니&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;유형&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;디렉토리 이름&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div&gt;InnoDB실행 취소 테이블스페이스 를 생성하는 경로입니다. 기본값이 없습니다(NULL). 다른 경로를 지정하지 않으면 변수가 CREATE UNDO TABLESPACE정의한 디렉터리에 생성됩니다.&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;■&amp;nbsp;innodb_undo_tablespaces&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;동적&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;예&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;기본값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;최소값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;최대값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;127&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div&gt;실행 취소 테이블스페이스 의 수를 정의합니다.&amp;nbsp;이 innodb_undo_tablespaces 변수는 더 이상 사용되지 않으며 &lt;span&gt;MySQL 8.0.14부터 더 이상 구성할 수 없습니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;■&amp;nbsp;innodb_max_undo_log_size&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;동적&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;예&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;기본값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1073741824&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;최소값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;10485760&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;최대값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2**64-1&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;단위&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;바이트&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div&gt;&lt;span&gt;&lt;span style=&quot;background-color: #fdfdfd; color: #000000;&quot;&gt;실행 취소 테이블스페이스의 임계값 크기&lt;/span&gt;&lt;span style=&quot;background-color: #fdfdfd; color: #000000;&quot;&gt;를 정의합니다. 실행 취소 테이블스페이스가 임계값을 초과하면 innodb_undo_log_truncate가 활성화된 경우 잘라내기로 표시할 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;■&amp;nbsp;innodb_status_output_locks&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;InnoDB Status를 보는 부분(&quot;SHOW ENGINE INNODB STATUS&quot; 혹은 에러로그)에 lock 정보도 함께 표시되도록 함&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;■&amp;nbsp;innodb_print_all_deadlocks&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;에러 로그에 InnoDB 데드락 정보 기록 활성화&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;■&amp;nbsp;innodb_adaptive_hash_index&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;동적&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;예&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;기본값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ON&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div&gt;&lt;span style=&quot;background-color: #fdfdfd; color: #000000;&quot;&gt;InnoDB 적응형 해시 인덱스를 사용할지 여부를 지정합니다.&amp;nbsp;&lt;/span&gt; &lt;span style=&quot;background-color: #fdfdfd; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #fdfdfd; color: #000000;&quot;&gt;적응형 해시 인덱스를 사용하지 않도록 설정하면 해시 테이블이 즉시 비워&lt;/span&gt;집니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span style=&quot;background-color: #fdfdfd; color: #000000;&quot;&gt;워크로드에 따라 적응형 해시 인덱싱을 동적으로 활성화하거나 비활성화하여 쿼리 성능을 향상시키는 것이 바람직할 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #d100ff;&quot;&gt;■&amp;nbsp;innodb_buffer_pool_size&lt;/span&gt;&amp;nbsp;&lt;/b&gt;&lt;/div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;동적&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;예&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;기본값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;134217728&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;최소값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;5242880&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;최대값(64비트 플랫폼)&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2**64-1&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;최대값(32비트 플랫폼)&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2**32-1&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;단위&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;바이트&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div&gt;&lt;span style=&quot;background-color: #fdfdfd; color: #000000;&quot;&gt;InnoDB가 테이블 및 인덱스 데이터를 캐시하는 메모리 영역입니다.&amp;nbsp;&lt;/span&gt; &lt;span style=&quot;background-color: #fdfdfd; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #fdfdfd; color: #000000;&quot;&gt;버퍼 풀의 크기가 1GB보다 큰 경우 innodb_buffer_pool_instances를 1보다 큰 값으로 설정하면 사용 중인 서버의 확장성을 향상&lt;/span&gt;시킬 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span style=&quot;background-color: #fdfdfd; color: #000000;&quot;&gt;버퍼 풀이 클수록 동일한 테이블 데이터에 두 번 이상 액세스하는 데 필요한 디스크 I/O가 줄어듭니다.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;■&amp;nbsp;innodb_buffer_pool_instances&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span style=&quot;background-color: #fdfdfd; color: #000000;&quot;&gt;InnoDB 버퍼 풀이 분할된 영역의 수입니다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;버퍼풀의 갯수, 적절한 갯수로 나누면 뮤텍스(mutex) 경합이 줄어들어 DB 동시 처리 성능을 높여줌&lt;/div&gt;
&lt;div&gt;각각의 버퍼풀은 각각의 플러쉬 리스트 뮤텍스(mutex)를 가짐 (아마 LRU리스트도 가질 듯)&lt;/div&gt;
&lt;div&gt;각 버퍼풀은 InnoDB 엔진이 자동으로 적절히 배분해서 사용함&lt;/div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;동적&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;아니&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;기본값(Windows, 32비트 플랫폼)&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(autosized)&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;기본값(기타)&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;8 (or 1 if innodb_buffer_pool_size &amp;lt; 1GB)&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;최소값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;최대값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;64&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;■&amp;nbsp;innodb_doublewrite&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;background-color: #fdfdfd; color: #000000;&quot;&gt;이중 쓰기 버퍼링을 제어합니다.&amp;nbsp;&lt;/span&gt; &lt;span style=&quot;background-color: #fdfdfd; color: #000000;&quot;&gt;이중 쓰기 버퍼링은 대부분의 경우 기본적으로 사용하도록 설정됩니다.&lt;/span&gt;&lt;/div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;동적(&amp;ge; 8.0.30)&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;예&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;동적(&amp;le; 8.0.29)&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;아니&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;기본값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ON&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;유효한 값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ON&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;OFF&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;DETECT_AND_RECOVER&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;DETECT_ONLY&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #d100ff;&quot;&gt;■&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #d100ff;&quot;&gt;innodb_flush_log_at_trx_commit&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;동적&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;예&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;기본값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;유효한 값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;0&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div&gt;&lt;span&gt;InnoDB에서 커밋될 때마다 로그(redo)를 디스크에 플러시할지를 결정하는 옵션&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;fsync() 함수를 호출하는 빈도에 관한 옵션&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;0 : 커밋될 때마다 디스크 플러시를 하지는 않음, OS에서 적절한 시점(일반적으로 4~5초 간격)마다 데이터 동기화를 처리하게 됩니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;잘 못 되면 4~5초간의 데이터는 유실될 수도 있음&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;1 : 트랜잭션이 커밋될 때마다 로그 파일에 기록되고 디스크 플러시가 실행 (가장 안전, 가장 느림)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;2 : 커밋되면 강제로 로그 버퍼를 로그 파일에 쓰지만, 1초가 지나기 전에는 디스크에 저장되지 않습니다.&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;■&amp;nbsp;innodb_flush_method&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;동적&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;아니&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;기본값(Unix)&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;fsync&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;기본값(Windows)&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;unbuffered&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;유효한 값(Unix)&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;fsync&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;O_DSYNC&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;littlesync&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;nosync&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;O_DIRECT&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;O_DIRECT_NO_FSYNC&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;유효한 값(Windows)&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;unbuffered&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;normal&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #d100ff;&quot;&gt;■&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #d100ff;&quot;&gt;innodb_io_capacity&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;동적&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;예&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;기본값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;200&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;최소값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;100&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;최대값(64비트 플랫폼)&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2**64-1&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;최대값(32비트 플랫폼)&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2**32-1&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div&gt;&lt;span&gt;&lt;span style=&quot;background-color: #fdfdfd; color: #000000;&quot;&gt;버퍼 풀에서 페이지를 플러시하고 변경 버퍼에서 데이터를 병합하는 것과 같은 InnoDB 백그라운드 작업에 사용할 수 있는 초당 입출력 작업 수(IOPS)를 정의합니다.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;백그라운드 플러싱 속도 제어를 위한 변수, 큰 값을 지정하면 I/O 대역폭을 점유하므로 환경에 맞춰서 설정 필요.&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;■&amp;nbsp;sync_binlog&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;동적&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;예&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;기본값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;최소값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;0&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;최대값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4294967295&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div&gt;0: binary log를 기록하지만 직접적으로 플러시(동기화)를 실행하지 않고, OS에 맡김 (리눅스 계열은 3~5초 간격으로 자동 플러시함)&lt;/div&gt;
&lt;div&gt;1: binary log의 쓰기가 발생할 때마다 디스크 동기화 수행&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;binary log 손실은 없지만 잦은 디스크 I/O로 느려질 수 있음&lt;/div&gt;
&lt;div&gt;1 이상의 값: 설정된 횟수만큼 binary log 쓰기가 발생할 때마다 DB가 binary log 파일의 동기화를 실행&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;설정된 값이 클수록 손실될 수 있는 binary log의 양이 많아지고 binary log의 쓰기 성능은 좋아짐&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;■&amp;nbsp;max_binlog_size&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;동적&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;예&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;기본값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1073741824&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;최소값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4096&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;최대값&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1073741824&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;단위&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;바이트&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #555555;&quot;&gt;블록 크기&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4096&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div&gt;binary log file 최대 크기&lt;/div&gt;</description>
      <category>DataBase Admin/DB Admin</category>
      <category>mysql</category>
      <category>Parameter</category>
      <category>파라미터 정리</category>
      <author>jeonghyun</author>
      <guid isPermaLink="true">https://jhdatabase.tistory.com/115</guid>
      <comments>https://jhdatabase.tistory.com/entry/MySQL-MariaDB-Parameter-%EC%A0%95%EB%A6%AC#entry115comment</comments>
      <pubDate>Tue, 18 Oct 2022 10:20:00 +0900</pubDate>
    </item>
    <item>
      <title>[MySQL - 임시테이블(tmpdir) FULL 이슈]</title>
      <link>https://jhdatabase.tistory.com/entry/MySQL-%EC%9E%84%EC%8B%9C%ED%85%8C%EC%9D%B4%EB%B8%94tmpdir-FULL-%EC%9D%B4%EC%8A%88</link>
      <description>&lt;div&gt;&lt;b&gt;■ 발생 이슈&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;※ 최근 운영 중인 DB(Maria)서버에서 tmpdir 디스크가 100% 되어 DB가 내려갔습니다.&lt;/div&gt;
&lt;pre id=&quot;code_1666050656985&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@jhtest ~]# df -h
Filesystem                        Size  Used Avail Use% Mounted on devtmpfs                           32G     0   32G   0% /dev
32G  4.0K   32G   1% /dev/shm
tmpfs      
tmpfs                              32G  3.1G   29G  10% /run
tmpfs                              32G     0   32G   0% /sys/
/dev/xvda                          48G    0G   48G 100% /


[root@jhtest tmpdir]# ll
total 23461140
-rw-rw---- 1 mysql mysql     9322496 Oct 13 16:10 #sql_a4a_11.MAD
-rw-rw---- 1 mysql mysql      245760 Oct 13 16:10 #sql_a4a_11.MAI
-rw-rw---- 1 mysql mysql 11635564544 Oct 13 15:22 #sql_a4a_14.MAD
-rw-rw---- 1 mysql mysql        8192 Oct 13 14:57 #sql_a4a_14.MAI
-rw-rw---- 1 mysql mysql  5817786368 Oct 13 15:22 #sql_a4a_15.MAD
-rw-rw---- 1 mysql mysql        8192 Oct 13 14:57 #sql_a4a_15.MAI
-rw-rw---- 1 mysql mysql  5817786368 Oct 13 15:26 #sql_a4a_16.MAD
-rw-rw---- 1 mysql mysql   761577472 Oct 13 16:10 #sql_a4a_16.MAI
-rw-rw---- 1 mysql mysql    12836864 Oct 13 16:10 #sql_a4a_19.MAD
-rw-rw---- 1 mysql mysql        8192 Oct 13 16:10 #sql_a4a_19.MAI


[root@jhtest tmpdir]# du -sh
23G    .


## error-log
2022-10-13 14:56:02 139858034087680 [Warning] Warning: Enabling keys got errno 188 on .CTE, retrying
2022-10-13 15:27:39 139858540619520 [ERROR] mysqld: Disk full
(/sw/app/log/tmpdir/#sql_a4a_2.MAI); waiting for someone to free some space... (errno: 28 &quot;No space left on device&quot;)
2022-10-13 15:27:39 139859084064512 [ERROR] mysqld: Disk full
(/sw/app/log/tmpdir/#sql_a4a_0.MAI); waiting for someone to free some space... (errno: 28 &quot;No space left on device&quot;)
2022-10-13 15:27:39 139859086792448 [ERROR] mysqld: Disk full
(/sw/app/log/tmpdir/#sql_a4a_21.MAI); waiting for someone to free some space... (errno: 28 &quot;No space left on device&quot;)
(생략)
2022-10-13 16:11:25 140542464739136 [ERROR] mysqld: Can't create/write to file '/tmpdir/ibUlFcEm' (Errcode: 28 &quot;No space left on device&quot;)
2022-10-13 16:11:25 140542464739136 [ERROR] InnoDB: Unable to create temporary file; errno: 28
2022-10-13 16:11:25 140542464739136 [ERROR] mysqld: Can't create/write to file '/tmpdir/ibFFGWRk' (Errcode: 28 &quot;No space left on device&quot;)
2022-10-13 16:11:25 140542464739136 [ERROR] InnoDB: Unable to create temporary file; errno: 28 2022-10-13 16:11:25 140542464739136 [ERROR] InnoDB: Plugin initialization aborted with error Generic error
2022-10-13 16:11:25 140542464739136 [Note] InnoDB: Starting shutdown...
2022-10-13 16:11:25 140542464739136 [ERROR] Plugin 'InnoDB' init function returned error.
2022-10-13 16:11:25 140542464739136 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
2022-10-13 16:11:25 140542464739136 [Note] Plugin 'FEEDBACK' is disabled. 221013 16:11:25 server_audit: MariaDB Audit Plugin version 1.4.3 STARTED.
2022-10-13 16:11:25 140542464739136 [ERROR] Unknown/unsupported storage engine: InnoDB 2022-10-13 16:11:25 140542464739136 [ERROR] Aborting&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;■ 발생 이유&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;아래의 이유로 tmpdir에 임시 테이블을 사용하는데 해당 경로(디스크)가 full차서 더이상 쿼리 실행이 불가하여 DB가 down되었다.&lt;/div&gt;
&lt;div&gt;&lt;b&gt;tmpdir&lt;/b&gt; - mysql 쿼리 실행 중 &lt;b&gt;&lt;u&gt;join 이나 union 등 테이블을 합쳐지거나 스토리지 엔진으로부터 받아온 레코드를 order by 나&amp;nbsp;&amp;nbsp;group by 할 때 혹은 alter 테이블 명령어 수행을 위해 내부적인 임시 테이블을 사용&lt;/u&gt;&lt;/b&gt;합니다.&lt;/div&gt;
&lt;div&gt;작업을 해야하는 경우가 있는데 &lt;b&gt;&lt;u&gt;데이터가 많거나 해서 메모리에 다 올려서 작업을 못할 경우 아래 설정된 임시 디스크를 사용&lt;/u&gt;&lt;/b&gt;하게 됩니다.&lt;/div&gt;
&lt;div&gt;&lt;u&gt;&lt;b&gt;일반적으로 임시 테이블은 처음엔 메모리에 생성됐다가 설정값 (max_heap_table_size 혹은 tmp_table_size 값)을 초과하는 경우 디스크로 옮겨지며 이와 같은 내부적인 임시테이블은 쿼리 수행이 완료되면 자동으로 삭제됩니다.&lt;/b&gt;&lt;/u&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;■ 조치 방법&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;1.&lt;/b&gt;&lt;b&gt;&amp;nbsp;show processlist 시 temp 디스크 사용하는 thread 확인 후 정리&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;1) copying to tmp table&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;정렬하는 데이터 크기가 tmp_table_size, max_heap_table_size 보다 작아서 memory 내에 tmp 임시테이블 생성&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;2) copying to tmp disk&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;정렬하는 데이터 크기가 tmp_table_size, max_heap_table_size 보다 커져서 memory가 아닌 디스크에 tmp 임시 테이블 생성&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;2.temp 영역을 사용하는 쿼리는 hang 상태가 되기 때문에 temp 영역을 증설하거나 temp를 많이 사용하는 쿼리(slow query)를 정리해야합니다.&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;3.temp 영역 여러개 지정&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;tmpdir 설정에&amp;nbsp;&amp;nbsp;' : ' 로 구분하여 복수로 지정가능합니다.&lt;/span&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1666050754579&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@localhost ~]# vi /etc/my.cnf

[mysqld]
datadir=/data/data
socket=/tmp/mysql.sock
lower_case_table_names=1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
performance_schema = ON


tmpdir=/tmp:/data/data



MariaDB [(none)]&amp;gt; show variables like 'tmpdir';
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| tmpdir        | /tmp:/data/data |
+---------------+-----------------+
1 row in set (0.00 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;위와 같이 지정시 지정된 tmpdir를 round-robin 식으로 사용할 수 있습니다.&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;4.파라미터 수정&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;background-color: #fdfdfd; color: #000000;&quot;&gt;메모리의 여유를 고려하여&amp;nbsp;&lt;/span&gt;&lt;span&gt;max_heap_table_size,&amp;nbsp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;tmp_table_size&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;파라미터 수정&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;background-color: #fdfdfd; color: #000000;&quot;&gt;내부 메모리 임시 테이블에 MEMORY 스토리지 엔진을 사용할 때 실제 크기 제한은 tmp_table_size와 max_heap_table_size 중 더 작은 크기입니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;background-color: #fdfdfd; color: #000000;&quot;&gt;고급&lt;/span&gt;&lt;u&gt;&lt;b&gt;&lt;span style=&quot;background-color: #fdfdfd; color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #fdfdfd; color: #000000;&quot;&gt;GROUP BY 쿼리를 많이 수행&lt;/span&gt;&lt;span style=&quot;background-color: #fdfdfd; color: #000000;&quot;&gt;하고&lt;/span&gt;&lt;span style=&quot;background-color: #fdfdfd; color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #fdfdfd; color: #000000;&quot;&gt;메모리가 많은 경우&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;&lt;span style=&quot;background-color: #fdfdfd; color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #fdfdfd; color: #000000;&quot;&gt;tmp_table_size(내부 메모리 임시 테이블에 MEMORY 스토리지 엔진을 사용할 경우 필요한 경우 max_heap_table_size) 값을 늘립니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;참고&lt;/b&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://sarc.io/index.php/mariadb/1058-mariadb-tmp-full&quot;&gt;https://sarc.io/index.php/mariadb/1058-mariadb-tmp-full&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1666050798584&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;MariaDB tmp full 발생 시 조치방법&quot; data-og-description=&quot;Tech Note 정보 kimdubi 님이 작성하신 글입니다. 카테고리: [ MariaDB ] 게시됨: 21 January 2018 작성됨: 21 January 2018 최종 변경: 21 January 2018 조회수: 20138 --1. tmp란 스토리지 엔진으로부터 받아온 레코드를 or&quot; data-og-host=&quot;sarc.io&quot; data-og-source-url=&quot;https://sarc.io/index.php/mariadb/1058-mariadb-tmp-full&quot; data-og-url=&quot;https://sarc.io/index.php/mariadb/1058-mariadb-tmp-full&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bfI1J6/hyQa2TKsh8/bfidHohI5GPSf1X5A0Oa9k/img.png?width=869&amp;amp;height=1087&amp;amp;face=0_0_869_1087&quot;&gt;&lt;a href=&quot;https://sarc.io/index.php/mariadb/1058-mariadb-tmp-full&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://sarc.io/index.php/mariadb/1058-mariadb-tmp-full&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bfI1J6/hyQa2TKsh8/bfidHohI5GPSf1X5A0Oa9k/img.png?width=869&amp;amp;height=1087&amp;amp;face=0_0_869_1087');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;MariaDB tmp full 발생 시 조치방법&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Tech Note 정보 kimdubi 님이 작성하신 글입니다. 카테고리: [ MariaDB ] 게시됨: 21 January 2018 작성됨: 21 January 2018 최종 변경: 21 January 2018 조회수: 20138 --1. tmp란 스토리지 엔진으로부터 받아온 레코드를 or&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;sarc.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>DataBase Admin/Trouble shooting</category>
      <category>mysql</category>
      <category>tmpdir</category>
      <category>임시테이블</category>
      <author>jeonghyun</author>
      <guid isPermaLink="true">https://jhdatabase.tistory.com/114</guid>
      <comments>https://jhdatabase.tistory.com/entry/MySQL-%EC%9E%84%EC%8B%9C%ED%85%8C%EC%9D%B4%EB%B8%94tmpdir-FULL-%EC%9D%B4%EC%8A%88#entry114comment</comments>
      <pubDate>Tue, 18 Oct 2022 08:58:20 +0900</pubDate>
    </item>
    <item>
      <title>[MySQL - mysql-proxy] part 2. Read/Write Split &amp;amp; 부하테스트</title>
      <link>https://jhdatabase.tistory.com/entry/MySQL-mysql-proxy-part-2-ReadWrite-Split-%EB%B6%80%ED%95%98%ED%85%8C%EC%8A%A4%ED%8A%B8</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Master 서버로는 Read &amp;amp; Write 작업을하고 Slave 서버로는 Read 작업을하여 select 쿼리에 대한 부하분산 구성을 하고 sysbench를 이용해 부하테스트를 진행하여 ProxySQL 툴과의 성능 비교를 진행하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;856&quot; data-origin-height=&quot;564&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bE0Sbu/btrNbb0rDqo/6nCt0XRmffIvl7N2dnpGFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bE0Sbu/btrNbb0rDqo/6nCt0XRmffIvl7N2dnpGFK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bE0Sbu/btrNbb0rDqo/6nCt0XRmffIvl7N2dnpGFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbE0Sbu%2FbtrNbb0rDqo%2F6nCt0XRmffIvl7N2dnpGFK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;856&quot; height=&quot;564&quot; data-origin-width=&quot;856&quot; data-origin-height=&quot;564&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;읽기와 쓰기 분리 기술을 구현하는 방법에는 여러 가지가 있습니다.&amp;nbsp; 읽기 및 쓰기가 분리된 lua 파일이 포함되어 있습니다. 이 파일은 mysql-proxy를 사용하여 읽기 및 쓰기 분리를 달성하는 데 사용해야 하는 파일이기도 합니다. 구문 분석을 위해 lua 파서가 필요합니다. 따라서 루아 파서를 설치해야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;■ config 파일 생성&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1664243672683&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@mysqlproxy mysql-proxy]# mkdir /usr/local/mysql-proxy/conf/
[root@mysqlproxy conf]# vi /usr/local/mysql-proxy/conf/mysql-proxy.conf
[mysql-proxy]
Daemon = true
Keepalive = true
Log-level = debug
Log-file =/usr/local/mysql-proxy/log/mysql-proxy.log
Basedir =/usr/local/mysql-proxy
Proxy-address = 0.0.0.0:4040
Proxy-backend-addresses = 192.168.100.82:3306
Proxy-read-only-backend-addresses = 192.168.100.81:3306
Proxy-lua-script =/usr/local/mysql-proxy/rw-splitting.lua


※ 설명
Daemon = true # 나중에 데몬 시작
Keepalive = true # 프로세스 실패 후 자동으로 다시 시작
Log-level = debug # 디버그할 로그 수준을 설정합니다. 디버깅 후 정보로 변경할 수 있습니다.
Log-file =/usr/local/mysql-proxy/log/mysql-proxy.log # 로그 파일 경로 설정
Basedir =/usr/local/mysql-proxy # mysql-proxy의 홈 디렉토리 설정
Proxy-address = 0.0.0.0:4040 # 지정 mysql-proxy의 수신 주소
Proxy-backend-addresses = 192.168.100.82:3306 # 백엔드 마스터 서버 설정
Proxy-read-only-backend-addresses = 192.168.100.81:3306 # 백그라운드 슬레이브 서버 설정
Proxy-lua-script =/usr/local/mysql-proxy/rw-splitting.lua # 읽기/쓰기 분할 스크립트 경로 설정

Admin-address = 192.168.216.132: 4041 # set 상위 관리자 플러그인이 필요한 mysql-proxy 관리 주소
Admin-username = admin # 로그온 관리 주소 설정 user
Admin-password = admin # 관리 사용자 암호 설정
Admin-lua-script =/usr/local/mysql -proxy/share/doc/mysql-proxy/admin. lua # 관리 백그라운드에서 lua 스크립트 경로를 설정합니다. 스크립트는 기본적으로 자동으로 정의되지 않습니다.


[root@mysqlproxy mysql-proxy]# chmod 600 /usr/local/mysql-proxy/conf/mysql-proxy.conf


## 기동
[root@mysqlproxy bin]# ./mysql-proxy --plugins=proxy --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf &amp;amp;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ read/write split 확인&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1664243709610&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;※ proxy로 select 쿼리 실행
[root@jh-mha002 ~]# mysql -ukim -pkim --port 4040 -h 192.168.100.84 -e &quot;select * from kim.sbtest1;&quot;



## Master로 쿼리가 간다..
MariaDB [kim]&amp;gt; select * from information_schema.processlist where user='kim';
+-----+------+----------------------+------+---------+------+-------+------+----------+-------+-----------+----------+-------------+-----------------+---------------+----------+-------------+-------+
| ID  | USER | HOST                 | DB   | COMMAND | TIME | STATE | INFO | TIME_MS  | STAGE | MAX_STAGE | PROGRESS | MEMORY_USED | MAX_MEMORY_USED | EXAMINED_ROWS | QUERY_ID | INFO_BINARY | TID   |
+-----+------+----------------------+------+---------+------+-------+------+----------+-------+-----------+----------+-------------+-----------------+---------------+----------+-------------+-------+
| 248 | kim  | 192.168.100.84:43388 | NULL | Sleep   |    4 |       | NULL | 4847.333 |     0 |         0 |    0.000 |       77816 |           77816 |             0 |      312 | NULL        | 21612 |
+-----+------+----------------------+------+---------+------+-------+------+----------+-------+-----------+----------+-------------+-----------------+---------------+----------+-------------+-------+


## slave
MariaDB [(none)]&amp;gt; select * from information_schema.processlist where user='kim';
Empty set (0.001 sec)


Master는 read/write이 모두 되고 Slave는 read만 가능.


## Mater로 2번의 select 쿼리
MariaDB [kim]&amp;gt; select * from information_schema.processlist where user='kim';
+-----+------+----------------------+------+---------+------+-------+------+-----------+-------+-----------+----------+-------------+-----------------+---------------+----------+-------------+-------+
| ID  | USER | HOST                 | DB   | COMMAND | TIME | STATE | INFO | TIME_MS   | STAGE | MAX_STAGE | PROGRESS | MEMORY_USED | MAX_MEMORY_USED | EXAMINED_ROWS | QUERY_ID | INFO_BINARY | TID   |
+-----+------+----------------------+------+---------+------+-------+------+-----------+-------+-----------+----------+-------------+-----------------+---------------+----------+-------------+-------+
| 250 | kim  | 192.168.100.84:43400 | NULL | Sleep   |   13 |       | NULL | 13457.032 |     0 |         0 |    0.000 |       77816 |           77816 |             0 |      312 | NULL        | 21612 |
| 249 | kim  | 192.168.100.84:43398 | NULL | Sleep   |   13 |       | NULL | 13444.218 |     0 |         0 |    0.000 |       77816 |           77816 |             0 |      317 | NULL        | 20453 |
+-----+------+----------------------+------+---------+------+-------+------+-----------+-------+-----------+----------+-------------+-----------------+---------------+----------+-------------+-------+
2 rows in set (0.001 sec)



## Slave로 2번의 select 쿼리
MariaDB [(none)]&amp;gt; select * from information_schema.processlist where user='kim';
+-----+------+----------------------+------+---------+------+-------+------+-----------+-------+-----------+----------+-------------+-----------------+---------------+----------+-------------+-------+
| ID  | USER | HOST                 | DB   | COMMAND | TIME | STATE | INFO | TIME_MS   | STAGE | MAX_STAGE | PROGRESS | MEMORY_USED | MAX_MEMORY_USED | EXAMINED_ROWS | QUERY_ID | INFO_BINARY | TID   |
+-----+------+----------------------+------+---------+------+-------+------+-----------+-------+-----------+----------+-------------+-----------------+---------------+----------+-------------+-------+
| 721 | kim  | 192.168.100.84:44484 | NULL | Sleep   |   34 |       | NULL | 34593.397 |     0 |         0 |    0.000 |       69632 |           69632 |             0 |      897 | NULL        | 18253 |
| 720 | kim  | 192.168.100.84:44480 | NULL | Sleep   |   34 |       | NULL | 34580.873 |     0 |         0 |    0.000 |       69632 |           69632 |             0 |      915 | NULL        | 18227 |
+-----+------+----------------------+------+---------+------+-------+------+-----------+-------+-----------+----------+-------------+-----------------+---------------+----------+-------------+-------+
2 rows in set (0.002 sec)



※ proxy로 insert 쿼리 실행 (4번실행)
[root@jh-mha002 sysbench]# mysql -ukim -pkim --port 4040 -h 192.168.100.84 -e &quot;insert into kim.sbtest1 values(1000000000,1,'kim','jh');&quot;
[root@jh-mha002 sysbench]# mysql -ukim -pkim --port 4040 -h 192.168.100.84 -e &quot;insert into kim.sbtest1 values(1000000003,1,'kim','jh');&quot;
[root@jh-mha002 sysbench]# mysql -ukim -pkim --port 4040 -h 192.168.100.84 -e &quot;insert into kim.sbtest1 values(1000000004,1,'kim','jh');&quot;
[root@jh-mha002 sysbench]# mysql -ukim -pkim --port 4040 -h 192.168.100.84 -e &quot;insert into kim.sbtest1 values(1000000005,1,'kim','jh');&quot;



## master로 세션이 붙는거 확인
MariaDB [kim]&amp;gt; select * from information_schema.processlist where user='kim';
+------+------+----------------------+------+---------+------+-------+------+-----------+-------+-----------+----------+-------------+-----------------+---------------+----------+-------------+------+
| ID   | USER | HOST                 | DB   | COMMAND | TIME | STATE | INFO | TIME_MS   | STAGE | MAX_STAGE | PROGRESS | MEMORY_USED | MAX_MEMORY_USED | EXAMINED_ROWS | QUERY_ID | INFO_BINARY | TID  |
+------+------+----------------------+------+---------+------+-------+------+-----------+-------+-----------+----------+-------------+-----------------+---------------+----------+-------------+------+
| 1105 | kim  | 192.168.100.84:46764 | NULL | Sleep   |    2 |       | NULL |  2199.329 |     0 |         0 |    0.000 |       69632 |           69632 |             0 |  2912197 | NULL        | 8925 |
| 1104 | kim  | 192.168.100.84:46762 | NULL | Sleep   |   14 |       | NULL | 14114.485 |     0 |         0 |    0.000 |       69632 |           69632 |             0 |  2912029 | NULL        | 8926 |
| 1103 | kim  | 192.168.100.84:46760 | NULL | Sleep   |   14 |       | NULL | 14110.676 |     0 |         0 |    0.000 |       77976 |           77976 |             0 |  2912281 | NULL        | 8927 |
| 1102 | kim  | 192.168.100.84:46758 | NULL | Sleep   |    2 |       | NULL |  2195.826 |     0 |         0 |    0.000 |       77976 |           77976 |             0 |  2912283 | NULL        | 8928 |
+------+------+----------------------+------+---------+------+-------+------+-----------+-------+-----------+----------+-------------+-----------------+---------------+----------+-------------+------+
4 rows in set (0.001 sec)


## slave
MariaDB [(none)]&amp;gt; select user, host, command from information_schema.processlist where user='kim';
Empty set (0.002 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;※&amp;nbsp; 에러 발생&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;proxy를 통해서 접속이 안된다. 아무래도 proxy에 설정한 connection 수 문제인거 같다..&lt;/div&gt;
&lt;pre id=&quot;code_1664243739120&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@jh-mha002 ~]# mysql -ukim -pkim --port 4040 -h 192.168.100.84 -e &quot;select * from kim.sbtest1;&quot;
ERROR 1047 (08S01): Unknown command


## idle_connections 수 조정
[root@mysqlproxy mysql-proxy]# vi rw-splitting.lua
...생략
--- config
--
-- connection pool
if not proxy.global.config.rwsplit then
        proxy.global.config.rwsplit = {
                min_idle_connections = 100,
                max_idle_connections = 1,                    

                is_debug = false
        }
end&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;■ 부하테스트 (Write)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1664243787227&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@jh-mha002 ~]# yum -y install epel-release
[root@jh-mha002 ~]# yum -y install sysbench
## prepare
[root@jh-mha002 ~]# sysbench --mysql-db=kim --mysql-host=192.168.100.84 --mysql-port=4040 --mysql-user=kim --mysql-password=kim --threads=50 --report-interval=10 --max-time=150 --max-requests=0 /usr/share/sysbench/oltp_insert.lua prepare



## Run (1차)
[root@jh-mha002 ~]# sysbench --mysql-db=kim --mysql-host=192.168.100.84 --mysql-port=4040 --mysql-user=kim --mysql-password=kim --threads=50 --report-interval=10 --max-time=150 --max-requests=0 /usr/share/sysbench/oltp_insert.lua run
WARNING: --max-time is deprecated, use --time instead
sysbench 1.0.17 (using system LuaJIT 2.0.4)

Running the test with following options:
Number of threads: 50
Report intermediate results every 10 second(s)
Initializing random number generator from current time


Initializing worker threads...

Threads started!

[ 10s ] thds: 50 tps: 11054.89 qps: 11054.89 (r/w/o: 0.00/11054.89/0.00) lat (ms,95%): 6.91 err/s: 0.00 reconn/s: 0.00
[ 20s ] thds: 50 tps: 10776.86 qps: 10776.86 (r/w/o: 0.00/10776.86/0.00) lat (ms,95%): 7.84 err/s: 0.00 reconn/s: 0.00
[ 30s ] thds: 50 tps: 10712.71 qps: 10712.71 (r/w/o: 0.00/10712.71/0.00) lat (ms,95%): 7.84 err/s: 0.00 reconn/s: 0.00
[ 40s ] thds: 50 tps: 8927.42 qps: 8927.42 (r/w/o: 0.00/8927.42/0.00) lat (ms,95%): 7.98 err/s: 0.00 reconn/s: 0.00
[ 50s ] thds: 50 tps: 10791.95 qps: 10791.95 (r/w/o: 0.00/10791.95/0.00) lat (ms,95%): 7.98 err/s: 0.00 reconn/s: 0.00
[ 60s ] thds: 50 tps: 10331.18 qps: 10331.18 (r/w/o: 0.00/10331.18/0.00) lat (ms,95%): 8.13 err/s: 0.00 reconn/s: 0.00
[ 70s ] thds: 50 tps: 9829.07 qps: 9829.07 (r/w/o: 0.00/9829.07/0.00) lat (ms,95%): 8.90 err/s: 0.00 reconn/s: 0.00
[ 80s ] thds: 50 tps: 8904.98 qps: 8904.98 (r/w/o: 0.00/8904.98/0.00) lat (ms,95%): 8.43 err/s: 0.00 reconn/s: 0.00
[ 90s ] thds: 50 tps: 9959.46 qps: 9959.46 (r/w/o: 0.00/9959.46/0.00) lat (ms,95%): 8.74 err/s: 0.00 reconn/s: 0.00
[ 100s ] thds: 50 tps: 10101.32 qps: 10101.32 (r/w/o: 0.00/10101.32/0.00) lat (ms,95%): 8.43 err/s: 0.00 reconn/s: 0.00
[ 110s ] thds: 50 tps: 8527.15 qps: 8527.15 (r/w/o: 0.00/8527.15/0.00) lat (ms,95%): 9.56 err/s: 0.00 reconn/s: 0.00
[ 120s ] thds: 50 tps: 10650.07 qps: 10650.07 (r/w/o: 0.00/10650.07/0.00) lat (ms,95%): 8.13 err/s: 0.00 reconn/s: 0.00
[ 130s ] thds: 50 tps: 10106.67 qps: 10106.67 (r/w/o: 0.00/10106.67/0.00) lat (ms,95%): 8.58 err/s: 0.00 reconn/s: 0.00
[ 140s ] thds: 50 tps: 10303.24 qps: 10303.24 (r/w/o: 0.00/10303.24/0.00) lat (ms,95%): 8.74 err/s: 0.00 reconn/s: 0.00
[ 150s ] thds: 50 tps: 7809.99 qps: 7809.99 (r/w/o: 0.00/7809.99/0.00) lat (ms,95%): 9.56 err/s: 0.00 reconn/s: 0.00
SQL statistics:
    queries performed:
        read:                            0
        write:                           1487950
        other:                           0
        total:                           1487950
    transactions:                        1487950 (9918.44 per sec.)
    queries:                             1487950 (9918.44 per sec.)
    ignored errors:                      0      (0.00 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          150.0166s
    total number of events:              1487950

Latency (ms):
         min:                                    1.02
         avg:                                    5.04
         max:                                 1762.27
         95th percentile:                        8.28
         sum:                              7496536.93

Threads fairness:
    events (avg/stddev):           29759.0000/315.58
    execution time (avg/stddev):   149.9307/0.00




## Run (2차)
[ 10s ] thds: 50 tps: 10326.17 qps: 10326.17 (r/w/o: 0.00/10326.17/0.00) lat (ms,95%): 8.43 err/s: 0.00 reconn/s: 0.00
[ 20s ] thds: 50 tps: 10193.19 qps: 10193.19 (r/w/o: 0.00/10193.19/0.00) lat (ms,95%): 8.43 err/s: 0.00 reconn/s: 0.00
[ 30s ] thds: 50 tps: 10056.12 qps: 10056.12 (r/w/o: 0.00/10056.12/0.00) lat (ms,95%): 9.39 err/s: 0.00 reconn/s: 0.00
[ 40s ] thds: 50 tps: 8510.06 qps: 8510.06 (r/w/o: 0.00/8510.06/0.00) lat (ms,95%): 9.56 err/s: 0.00 reconn/s: 0.00
[ 50s ] thds: 50 tps: 9764.79 qps: 9764.79 (r/w/o: 0.00/9764.79/0.00) lat (ms,95%): 9.39 err/s: 0.00 reconn/s: 0.00
[ 60s ] thds: 50 tps: 9541.55 qps: 9541.55 (r/w/o: 0.00/9541.55/0.00) lat (ms,95%): 10.27 err/s: 0.00 reconn/s: 0.00
[ 70s ] thds: 50 tps: 7707.91 qps: 7707.91 (r/w/o: 0.00/7707.91/0.00) lat (ms,95%): 10.27 err/s: 0.00 reconn/s: 0.00
[ 80s ] thds: 50 tps: 9570.07 qps: 9570.07 (r/w/o: 0.00/9570.07/0.00) lat (ms,95%): 10.09 err/s: 0.00 reconn/s: 0.00
[ 90s ] thds: 50 tps: 9297.82 qps: 9297.82 (r/w/o: 0.00/9297.82/0.00) lat (ms,95%): 10.84 err/s: 0.00 reconn/s: 0.00
[ 100s ] thds: 50 tps: 9081.51 qps: 9081.51 (r/w/o: 0.00/9081.51/0.00) lat (ms,95%): 11.24 err/s: 0.00 reconn/s: 0.00
[ 110s ] thds: 50 tps: 7644.00 qps: 7644.00 (r/w/o: 0.00/7644.00/0.00) lat (ms,95%): 10.27 err/s: 0.00 reconn/s: 0.00
[ 120s ] thds: 50 tps: 8817.55 qps: 8817.55 (r/w/o: 0.00/8817.55/0.00) lat (ms,95%): 11.45 err/s: 0.00 reconn/s: 0.00
[ 130s ] thds: 50 tps: 8196.68 qps: 8196.68 (r/w/o: 0.00/8196.68/0.00) lat (ms,95%): 11.04 err/s: 0.00 reconn/s: 0.00
[ 140s ] thds: 50 tps: 8715.71 qps: 8715.71 (r/w/o: 0.00/8715.71/0.00) lat (ms,95%): 11.04 err/s: 0.00 reconn/s: 0.00
[ 150s ] thds: 50 tps: 8666.87 qps: 8666.87 (r/w/o: 0.00/8666.87/0.00) lat (ms,95%): 12.30 err/s: 0.00 reconn/s: 0.00
SQL statistics:
    queries performed:
        read:                            0
        write:                           1360980
        other:                           0
        total:                           1360980
    transactions:                        1360980 (9072.17 per sec.)
    queries:                             1360980 (9072.17 per sec.)
    ignored errors:                      0      (0.00 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          150.0151s
    total number of events:              1360980

Latency (ms):
         min:                                    0.91
         avg:                                    5.51
         max:                                 1713.78
         95th percentile:                        9.91
         sum:                              7496840.66

Threads fairness:
    events (avg/stddev):           27219.6000/266.99
    execution time (avg/stddev):   149.9368/0.00&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;■ ProxySQL&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;회사 선배와 동일한 환경에서 proxy툴만 다르게하여 부하테스트를 진행했습니다. (성능 비교를 위함)&lt;/p&gt;
&lt;pre id=&quot;code_1664243947731&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;1차 RUN
sysbench 1.0.17 (using system LuaJIT 2.0.4)

Running the test with following options:
Number of threads: 50
Report intermediate results every 10 second(s)
Initializing random number generator from current time


Initializing worker threads...

Threads started!

[ 10s ] thds: 50 tps: 5534.42 qps: 5534.42 (r/w/o: 0.00/5534.42/0.00) lat (ms,95%): 17.01 err/s: 0.00 reconn/s: 0.00
[ 20s ] thds: 50 tps: 5264.19 qps: 5264.19 (r/w/o: 0.00/5264.19/0.00) lat (ms,95%): 16.71 err/s: 0.00 reconn/s: 0.00
[ 30s ] thds: 50 tps: 5260.26 qps: 5260.26 (r/w/o: 0.00/5260.26/0.00) lat (ms,95%): 16.71 err/s: 0.00 reconn/s: 0.00
[ 40s ] thds: 50 tps: 5184.56 qps: 5184.56 (r/w/o: 0.00/5184.56/0.00) lat (ms,95%): 17.01 err/s: 0.00 reconn/s: 0.00
[ 50s ] thds: 50 tps: 5075.29 qps: 5075.29 (r/w/o: 0.00/5075.29/0.00) lat (ms,95%): 17.01 err/s: 0.00 reconn/s: 0.00
[ 60s ] thds: 50 tps: 5067.74 qps: 5067.74 (r/w/o: 0.00/5067.74/0.00) lat (ms,95%): 17.32 err/s: 0.00 reconn/s: 0.00
[ 70s ] thds: 50 tps: 5014.62 qps: 5014.62 (r/w/o: 0.00/5014.62/0.00) lat (ms,95%): 17.32 err/s: 0.00 reconn/s: 0.00
[ 80s ] thds: 50 tps: 5165.57 qps: 5165.57 (r/w/o: 0.00/5165.57/0.00) lat (ms,95%): 17.01 err/s: 0.00 reconn/s: 0.00
[ 90s ] thds: 50 tps: 5069.40 qps: 5069.40 (r/w/o: 0.00/5069.40/0.00) lat (ms,95%): 17.32 err/s: 0.00 reconn/s: 0.00
[ 100s ] thds: 50 tps: 4642.95 qps: 4642.95 (r/w/o: 0.00/4642.95/0.00) lat (ms,95%): 17.63 err/s: 0.00 reconn/s: 0.00
[ 110s ] thds: 50 tps: 4635.90 qps: 4635.90 (r/w/o: 0.00/4635.90/0.00) lat (ms,95%): 17.95 err/s: 0.00 reconn/s: 0.00
[ 120s ] thds: 50 tps: 4616.47 qps: 4616.47 (r/w/o: 0.00/4616.47/0.00) lat (ms,95%): 17.95 err/s: 0.00 reconn/s: 0.00
[ 130s ] thds: 50 tps: 4959.28 qps: 4959.28 (r/w/o: 0.00/4959.28/0.00) lat (ms,95%): 17.32 err/s: 0.00 reconn/s: 0.00
[ 140s ] thds: 50 tps: 5039.15 qps: 5039.15 (r/w/o: 0.00/5039.15/0.00) lat (ms,95%): 17.32 err/s: 0.00 reconn/s: 0.00
[ 150s ] thds: 50 tps: 5058.73 qps: 5058.73 (r/w/o: 0.00/5058.73/0.00) lat (ms,95%): 17.32 err/s: 0.00 reconn/s: 0.00
SQL statistics:
    queries performed:
        read:                            0
        write:                           755945
        other:                           0
        total:                           755945
    transactions:                        755945 (5038.84 per sec.)
    queries:                             755945 (5038.84 per sec.)
    ignored errors:                      0      (0.00 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          150.0221s
    total number of events:              755945

Latency (ms):
         min:                                    1.86
         avg:                                    9.92
         max:                                  107.20
         95th percentile:                       17.32
         sum:                              7499242.62

Threads fairness:
    events (avg/stddev):           15118.9000/40.71
    execution time (avg/stddev):   149.9849/0.00



2차 RUN
[ 10s ] thds: 50 tps: 5306.31 qps: 5306.31 (r/w/o: 0.00/5306.31/0.00) lat (ms,95%): 17.32 err/s: 0.00 reconn/s: 0.00
[ 20s ] thds: 50 tps: 5447.00 qps: 5447.00 (r/w/o: 0.00/5447.00/0.00) lat (ms,95%): 17.01 err/s: 0.00 reconn/s: 0.00
[ 30s ] thds: 50 tps: 5507.89 qps: 5507.89 (r/w/o: 0.00/5507.89/0.00) lat (ms,95%): 17.01 err/s: 0.00 reconn/s: 0.00
[ 40s ] thds: 50 tps: 5475.89 qps: 5475.89 (r/w/o: 0.00/5475.89/0.00) lat (ms,95%): 17.01 err/s: 0.00 reconn/s: 0.00
[ 50s ] thds: 50 tps: 5258.86 qps: 5258.86 (r/w/o: 0.00/5258.86/0.00) lat (ms,95%): 17.32 err/s: 0.00 reconn/s: 0.00
[ 60s ] thds: 50 tps: 5206.74 qps: 5206.74 (r/w/o: 0.00/5206.74/0.00) lat (ms,95%): 17.63 err/s: 0.00 reconn/s: 0.00
[ 70s ] thds: 50 tps: 5219.05 qps: 5219.05 (r/w/o: 0.00/5219.05/0.00) lat (ms,95%): 17.63 err/s: 0.00 reconn/s: 0.00
[ 80s ] thds: 50 tps: 5115.34 qps: 5115.34 (r/w/o: 0.00/5115.34/0.00) lat (ms,95%): 17.63 err/s: 0.00 reconn/s: 0.00
[ 90s ] thds: 50 tps: 5427.07 qps: 5427.07 (r/w/o: 0.00/5427.07/0.00) lat (ms,95%): 17.32 err/s: 0.00 reconn/s: 0.00
[ 100s ] thds: 50 tps: 5591.13 qps: 5591.13 (r/w/o: 0.00/5591.13/0.00) lat (ms,95%): 17.32 err/s: 0.00 reconn/s: 0.00
[ 110s ] thds: 50 tps: 5597.61 qps: 5597.61 (r/w/o: 0.00/5597.61/0.00) lat (ms,95%): 17.32 err/s: 0.00 reconn/s: 0.00
[ 120s ] thds: 50 tps: 5341.36 qps: 5341.36 (r/w/o: 0.00/5341.36/0.00) lat (ms,95%): 17.32 err/s: 0.00 reconn/s: 0.00
[ 130s ] thds: 50 tps: 5354.90 qps: 5354.90 (r/w/o: 0.00/5354.90/0.00) lat (ms,95%): 17.63 err/s: 0.00 reconn/s: 0.00
[ 140s ] thds: 50 tps: 5288.96 qps: 5288.96 (r/w/o: 0.00/5288.96/0.00) lat (ms,95%): 17.63 err/s: 0.00 reconn/s: 0.00
[ 150s ] thds: 50 tps: 5209.85 qps: 5209.85 (r/w/o: 0.00/5209.85/0.00) lat (ms,95%): 17.63 err/s: 0.00 reconn/s: 0.00
SQL statistics:
    queries performed:
        read:                            0
        write:                           803539
        other:                           0
        total:                           803539
    transactions:                        803539 (5356.40 per sec.)
    queries:                             803539 (5356.40 per sec.)
    ignored errors:                      0      (0.00 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          150.0133s
    total number of events:              803539

Latency (ms):
         min:                                    1.91
         avg:                                    9.33
         max:                                  253.80
         95th percentile:                       17.32
         sum:                              7498755.26

Threads fairness:
    events (avg/stddev):           16070.7800/40.37
    execution time (avg/stddev):   149.9751/0.00&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Proxy를 타고&amp;nbsp; Write작업을 진행할때 Proxy SQL보단 MySQL-Proxy가 더 성능이 잘나왔다. Read 부하 테스트를 아직 진행못해서 무엇이 더 낫다고는 못하지만 뭔가 mysql-proxy는 안정성이 떨어진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 무엇보다 현직 Mysql dba 고수님들의 얘기를 들었을때 보통 haproxy 쓴다고 합니다ㅎㅎ..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;참고&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;a href=&quot;https://medium.com/@mena.meseha/mysql-read-and-write-separation-4167d99b337c&quot;&gt;https://medium.com/@mena.meseha/mysql-read-and-write-separation-4167d99b337c&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1664243044724&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;MySQL read and write separation&quot; data-og-description=&quot;1. Introduction&quot; data-og-host=&quot;medium.com&quot; data-og-source-url=&quot;https://medium.com/@mena.meseha/mysql-read-and-write-separation-4167d99b337c&quot; data-og-url=&quot;https://medium.com/@mena.meseha/mysql-read-and-write-separation-4167d99b337c&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/HGdhp/hyPVq2f6cl/KYFwWi9IjYtZsWRRGywY1k/img.png?width=1200&amp;amp;height=755&amp;amp;face=0_0_1200_755,https://scrap.kakaocdn.net/dn/PZ6FH/hyPVnR0YOX/yPaY3umOQNBPcOHHrMJLWk/img.png?width=1400&amp;amp;height=881&amp;amp;face=0_0_1400_881,https://scrap.kakaocdn.net/dn/otKed/hyPVrUpz9v/zCckstPLIbmSyBeRkDa4m1/img.jpg?width=480&amp;amp;height=315&amp;amp;face=0_0_480_315&quot;&gt;&lt;a href=&quot;https://medium.com/@mena.meseha/mysql-read-and-write-separation-4167d99b337c&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://medium.com/@mena.meseha/mysql-read-and-write-separation-4167d99b337c&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/HGdhp/hyPVq2f6cl/KYFwWi9IjYtZsWRRGywY1k/img.png?width=1200&amp;amp;height=755&amp;amp;face=0_0_1200_755,https://scrap.kakaocdn.net/dn/PZ6FH/hyPVnR0YOX/yPaY3umOQNBPcOHHrMJLWk/img.png?width=1400&amp;amp;height=881&amp;amp;face=0_0_1400_881,https://scrap.kakaocdn.net/dn/otKed/hyPVrUpz9v/zCckstPLIbmSyBeRkDa4m1/img.jpg?width=480&amp;amp;height=315&amp;amp;face=0_0_480_315');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;MySQL read and write separation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;1. Introduction&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;medium.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>DataBase/MySQL &amp;amp; MariaDB</category>
      <category>mysql</category>
      <category>mysqlproxy</category>
      <category>proxy</category>
      <category>proxysql</category>
      <author>jeonghyun</author>
      <guid isPermaLink="true">https://jhdatabase.tistory.com/113</guid>
      <comments>https://jhdatabase.tistory.com/entry/MySQL-mysql-proxy-part-2-ReadWrite-Split-%EB%B6%80%ED%95%98%ED%85%8C%EC%8A%A4%ED%8A%B8#entry113comment</comments>
      <pubDate>Tue, 27 Sep 2022 11:02:22 +0900</pubDate>
    </item>
    <item>
      <title>[MySQL - mysql-proxy 설치] part 1.</title>
      <link>https://jhdatabase.tistory.com/entry/MySQL-mysql-proxy-%EC%84%A4%EC%B9%98-part-1</link>
      <description>&lt;div&gt;&lt;b&gt;&lt;span&gt;MySQL proxy이란&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #222222;&quot;&gt;네트워크 프로토콜을 사용하여 네트워크를 통해 MySQL의 서버와 클라이언트 사이의 통신을 제공하는 애플리케이션이다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #222222;&quot;&gt;기본적인 구성에서 클라이언트의 쿼리를 MySQL 서버로 전달하고 서버의 응답을 클라이언트에게 반환한다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #222222;&quot;&gt;기본 구성 외에도 클라이언트와 서버간 통신을 모니터링하고 변경할 수 있다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #222222;&quot;&gt;클라이언트에서 쿼리를 가로 채서 서버에 보낸 쿼리 목록에 추가 쿼리를 삽입하고 서버에서 반환 할 때 추가 결과를 제거 할 수 있다.&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #051922;&quot;&gt;proxy 서버를 구축 이유&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;div&gt;&lt;span style=&quot;color: #051922;&quot;&gt;&lt;b&gt;보안&lt;/b&gt; : 익명의 사용자가 서버에 직접 접근하는 것을 막는다.&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;span style=&quot;color: #051922;&quot;&gt;&lt;b&gt;속도&lt;/b&gt; : proxy 서버는 사용자의 요청을 cache 해서, 동일한 요청이 들어오면 cache의 자원을 반환한다. 이는 서비스의 속도를 높여준다.&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;span style=&quot;color: #051922;&quot;&gt;&lt;b&gt;ACL&lt;/b&gt; : 사이트 접근에 대한 접근 정책을 정의할 수 있다.&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;span style=&quot;color: #051922;&quot;&gt;&lt;b&gt;Log/Audit&lt;/b&gt; : 회사내 직원의 인터넷 사용을 레포팅 할 수 있다. 반대로 인트라넷의 사용을 레포팅할 수도 있다.&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;span style=&quot;color: #051922;&quot;&gt;지역 네트워크의 제한을 우회하기 위해서 : 보안상의 이유로 80번 외에는 포트를 막아 놓는 경우가 있는데, 이러한 제한을 우회해서 원하는 다른 서비스를 이용할 수 있다.&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MHA구조에서 proxy 테스트 진행을 위해 사전에 MySQL설치 및&amp;nbsp; MHA구성이 필요합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;테스트 환경&lt;/b&gt;&lt;/blockquote&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;Hostname&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;Public IP&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;Private IP&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;DB version&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;Role&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;VIP&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;jh-mha1&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;49.50.164.107&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;192.168.100.80&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;Mysql 8.0.28&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;Master&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;192.168.100.82&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;jh-mha2&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;101.101.211.249&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;192.168.100.81&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;Mysql 8.0.28&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;Slave&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;jh-mha3&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;27.96.131.135&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;192.168.100.83&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;MHA manager&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;mysqlproxy&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;101.101.208.34&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;192.168.100.84&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;MySQL Proxy&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt; &lt;span&gt;■ lua 설치&lt;/span&gt; &lt;/b&gt;&lt;/div&gt;
&lt;div&gt;공식 웹사이트 다운로드: &lt;a href=&quot;http://www.lua.org/download.html&quot;&gt;http://www.lua.org/download.html&lt;/a&gt;
&lt;figure id=&quot;og_1664242334286&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Lua: download&quot; data-og-description=&quot;Download Lua is free software distributed in source code. It may be used for any purpose, including commercial purposes, at absolutely no cost. All versions are available for download. The current version is Lua 5.4 and its current release is Lua&amp;nbsp;5.4.4. T&quot; data-og-host=&quot;www.lua.org&quot; data-og-source-url=&quot;http://www.lua.org/download.html&quot; data-og-url=&quot;http://www.lua.org/download.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;http://www.lua.org/download.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;http://www.lua.org/download.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Lua: download&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Download Lua is free software distributed in source code. It may be used for any purpose, including commercial purposes, at absolutely no cost. All versions are available for download. The current version is Lua 5.4 and its current release is Lua&amp;nbsp;5.4.4. T&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.lua.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;pre id=&quot;code_1664242354397&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@mysqlproxy ~]# yum -y install gcc.x86_64 libevent.x86_64 libevent-devel.x86_64 readline.x86_64 readline-devel.x86_64 ncurses.x86_64 ncurses-devel.x86_64 glib2.x86_64 glib2-devel.x86_64

[root@mysqlproxy ~]# wget http://www.lua.org/ftp/lua-5.1.4.tar.gz
--2022-09-20 14:52:57--  http://www.lua.org/ftp/lua-5.1.4.tar.gz
Resolving www.lua.org (www.lua.org)... 88.99.213.221, 2a01:4f8:10a:3edc::2
Connecting to www.lua.org (www.lua.org)|88.99.213.221|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 216679 (212K) [application/gzip]
Saving to: &amp;lsquo;lua-5.1.4.tar.gz&amp;rsquo;
100%[===================================================&amp;gt;] 216,679      226KB/s   in 0.9s   
2022-09-20 14:52:58 (226 KB/s) - &amp;lsquo;lua-5.1.4.tar.gz&amp;rsquo; saved [216679/216679]
[root@mysqlproxy ~]# tar -zxvf lua-5.1.4.tar.gz
[root@mysqlproxy ~]# cd lua-5.1.4/
[root@mysqlproxy lua-5.1.4]# make linux
[root@mysqlproxy lua-5.1.4]# make install
[root@mysqlproxy lua-5.1.4]# export LUA_CFLAGS=&quot;-I/usr/local/include&quot; LUA_LIBS=&quot;-L/usr/local/lib -llua -ldl&quot; LDFLAGS=&quot;-lm&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;■ mysql-proxy 설치&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1664242400935&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@mysqlproxy ~]# wget http://ftp.kaist.ac.kr/mysql/Downloads/MySQL-Proxy/mysql-proxy-0.8.5-linux-rhel5-x86-64bit.tar.gz
--2022-09-20 15:00:10--  http://ftp.kaist.ac.kr/mysql/Downloads/MySQL-Proxy/mysql-proxy-0.8.5-linux-rhel5-x86-64bit.tar.gz
Resolving ftp.kaist.ac.kr (ftp.kaist.ac.kr)... 103.22.220.133
Connecting to ftp.kaist.ac.kr (ftp.kaist.ac.kr)|103.22.220.133|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 12123640 (12M) [application/octet-stream]
Saving to: &amp;lsquo;mysql-proxy-0.8.5-linux-rhel5-x86-64bit.tar.gz&amp;rsquo;

100%[===================================================&amp;gt;] 12,123,640  10.1MB/s   in 1.1s   

2022-09-20 15:00:11 (10.1 MB/s) - &amp;lsquo;mysql-proxy-0.8.5-linux-rhel5-x86-64bit.tar.gz&amp;rsquo; saved [12123640/12123640]



[root@mysqlproxy ~]# tar -zxvf mysql-proxy-0.8.5-linux-rhel5-x86-64bit.tar.gz

[root@mysqlproxy ~]# mkdir /usr/local/mysql-proxy

[root@mysqlproxy ~]# cp -rp mysql-proxy-0.8.5-linux-rhel5-x86-64bit/* /usr/local/mysql-proxy

[root@mysqlproxy ~]# cd /usr/local/mysql-proxy&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;■ rw-splitting.lua 파일 수정&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1664242419540&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@mysqlproxy mysql-proxy]# cp /usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua  ./

[root@mysqlproxy mysql-proxy]# ls
bin  include  lib  libexec  licenses  rw-splitting.lua  share



[root@mysqlproxy mysql-proxy]# vi rw-splitting.lua
...생략
--- config
--
-- connection pool
if not proxy.global.config.rwsplit then
        proxy.global.config.rwsplit = {
                min_idle_connections = 1,
                max_idle_connections = 1,

                is_debug = false
        }
end&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ bash_profile 추가&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1664242436022&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@mysqlproxy bin]# vi ~/.bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH

export EDBDIR=/usr/local/mysql-proxy/rw-splitting.lua&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;■ mysql-proxy 기동&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1664242452597&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@mysqlproxy ~]# cd /usr/local/mysql-proxy/bin/


[root@mysqlproxy bin]# ./mysql-proxy --plugins=proxy  --proxy-read-only-backend-addresses=192.168.100.81:3306 --proxy-backend-addresses=192.168.100.82:3306 --proxy-lua-script=/usr/local/mysql-proxy/rw-splitting.lua &amp;amp;
[1] 23795
[root@mysqlproxy bin]# 2022-09-20 15:08:02: (critical) plugin proxy 0.8.5 started

&amp;mdash; proxy-read-only-backend-addresses #읽기 전용 서버 주소(ip)
&amp;mdash; proxy-backend-addresses #서버 주소(VIP 기입)
&amp;mdash; proxy-lua-script #luaScript 경로



[root@mysqlproxy bin]# ps -ef | grep mysql-proxy
root     28738 11392  0 16:47 pts/1    00:00:00 /usr/local/mysql-proxy/libexec/mysql-proxy --proxy-read-only-backend-addresses=192.168.100.81:3306 --proxy-backend-addresses=192.168.100.82:3306 --proxy-lua-script=/usr/local/mysql-proxy/rw-splitting.lua
root     28796 11392  0 16:48 pts/1    00:00:00 grep --color=auto mysql-proxy&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;■ DB 유저 생성&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1664242467108&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;MariaDB [(none)]&amp;gt; grant all on *.* to 'kim'@'192.168.100.84' identified by 'kim';&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;■ Slave에서 db proxy 접속(포트 4040)&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;-h &amp;lt;proxy서버 ip=&quot;&quot;&amp;gt;&amp;lt;/proxy서버&amp;gt;&lt;/b&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1664242480900&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@jh-mha002 ~]# mysql -ukim -pkim -h 192.168.100.84 --port 4040

MariaDB [(none)]&amp;gt; select @@hostname;
+------------+
| @@hostname |
+------------+
| jh-mha001  |
+------------+
1 row in set (0.002 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;참고&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://osskdb.wordpress.com/2016/11/23/mysql-proxy/&quot;&gt;https://osskdb.wordpress.com/2016/11/23/mysql-proxy/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1664242157637&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;MySQL Proxy&quot; data-og-description=&quot;MySQL Proxy란? 네트워크 프로토콜을 사용하여 네트워크를 통해 MySQL의 서버와 클라이언트 사이의 통신을 제공하는 애플리케이션이다. &amp;nbsp; &amp;nbsp; 기본적인 구성에서 클라이언트의 쿼리를 MySQL 서버로 전&quot; data-og-host=&quot;osskdb.wordpress.com&quot; data-og-source-url=&quot;https://osskdb.wordpress.com/2016/11/23/mysql-proxy/&quot; data-og-url=&quot;https://osskdb.wordpress.com/2016/11/23/mysql-proxy/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/riNqa/hyPWKLzClW/auxgtPWE1vGqDyaUOuYYx0/img.png?width=772&amp;amp;height=413&amp;amp;face=0_0_772_413,https://scrap.kakaocdn.net/dn/eGXQL/hyPVpCg9hR/yAb3UTNLqCKK5KJhz9OcbK/img.png?width=640&amp;amp;height=342&amp;amp;face=0_0_640_342,https://scrap.kakaocdn.net/dn/cdghrI/hyPVq816KM/YdAzcAQ4zKdkJKKAAZsyV1/img.png?width=648&amp;amp;height=346&amp;amp;face=0_0_648_346&quot;&gt;&lt;a href=&quot;https://osskdb.wordpress.com/2016/11/23/mysql-proxy/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://osskdb.wordpress.com/2016/11/23/mysql-proxy/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/riNqa/hyPWKLzClW/auxgtPWE1vGqDyaUOuYYx0/img.png?width=772&amp;amp;height=413&amp;amp;face=0_0_772_413,https://scrap.kakaocdn.net/dn/eGXQL/hyPVpCg9hR/yAb3UTNLqCKK5KJhz9OcbK/img.png?width=640&amp;amp;height=342&amp;amp;face=0_0_640_342,https://scrap.kakaocdn.net/dn/cdghrI/hyPVq816KM/YdAzcAQ4zKdkJKKAAZsyV1/img.png?width=648&amp;amp;height=346&amp;amp;face=0_0_648_346');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;MySQL Proxy&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;MySQL Proxy란? 네트워크 프로토콜을 사용하여 네트워크를 통해 MySQL의 서버와 클라이언트 사이의 통신을 제공하는 애플리케이션이다. &amp;nbsp; &amp;nbsp; 기본적인 구성에서 클라이언트의 쿼리를 MySQL 서버로 전&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;osskdb.wordpress.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>DataBase/MySQL &amp;amp; MariaDB</category>
      <author>jeonghyun</author>
      <guid isPermaLink="true">https://jhdatabase.tistory.com/112</guid>
      <comments>https://jhdatabase.tistory.com/entry/MySQL-mysql-proxy-%EC%84%A4%EC%B9%98-part-1#entry112comment</comments>
      <pubDate>Tue, 27 Sep 2022 10:42:08 +0900</pubDate>
    </item>
    <item>
      <title>[PostgreSQL - PostGIS 플러그인 설치]</title>
      <link>https://jhdatabase.tistory.com/entry/PostgreSQL-PostGIS-%ED%94%8C%EB%9F%AC%EA%B7%B8%EC%9D%B8-%EC%84%A4%EC%B9%98</link>
      <description>&lt;div&gt;&lt;b&gt;PostGIS이란,&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;객체 관계형 데이터베이스 시스템인 PostgreSQL의 확장 프로그램으로, 데이터베이스에 GIS(지리정보 시스템) 객체를 저장할 수 있게 해 줍니다. PostGIS는 GiST 기반 R-Tree 공간 인덱스를 지원하며, GIS 객체의 분석 및 공간 처리를 위한 기능을 포함하고 있습니다.&lt;/div&gt;
&lt;div&gt;PostGIS를 사용하면 &lt;span&gt;지리 정보 데이터&lt;/span&gt;를 다양하게 다룰 수 있습니다.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;주요기능&lt;/b&gt; : 공간 데이터 관리, 공간 데이터 연산, 분석, 공간 인덱스 지원 등&lt;/div&gt;
&lt;div&gt;공간 인덱스란 &lt;span&gt;특정의 좌표를 찍어 지도 내에서 무언가 사용자가 원하는 데이터를 검색&lt;/span&gt;하기 위해서 사용한다고 보면 이해하기 쉽습니다.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;사용 예시&lt;/b&gt; : 카카오 택시같이 지도내에 있는 택시를 검색해서 호출한다거나, 네이버 지도에서 식당이나 카페를 검색하는 것과 같은 작업을 할때 사용&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;■ Repo 추가&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1664241169165&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@jh-post003 yum.repos.d]# yum -y install epel-release

[root@s1833528f4ae ~]#  sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

[root@jh-post003 yum.repos.d]# cd /etc/yum.repo.d


[root@jh-post003 yum.repos.d]# vi pgdg-redhat-all.repo

#######################################################
# PGDG Red Hat Enterprise Linux / CentOS repositories #
#######################################################

# PGDG Red Hat Enterprise Linux / CentOS stable common repository for all PostgreSQL versions

[pgdg-common]
name=PostgreSQL common RPMs for RHEL / CentOS $releasever - $basearch
baseurl=http://download.postgresql.org/pub/repos/yum/common/redhat/rhel-$releasever-$basearch
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
repo_gpgcheck = 1

# PGDG Red Hat Enterprise Linux / CentOS stable repositories:

[pgdg14]
name=PostgreSQL 14 for RHEL / CentOS $releasever - $basearch
baseurl=http://download.postgresql.org/pub/repos/yum/14/redhat/rhel-$releasever-$basearch
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
repo_gpgcheck = 1

[pgdg13]
name=PostgreSQL 13 for RHEL / CentOS $releasever - $basearch
baseurl=http://download.postgresql.org/pub/repos/yum/13/redhat/rhel-$releasever-$basearch
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
repo_gpgcheck = 1

[pgdg12]
name=PostgreSQL 12 for RHEL / CentOS $releasever - $basearch
baseurl=http://download.postgresql.org/pub/repos/yum/12/redhat/rhel-$releasever-$basearch
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
repo_gpgcheck = 1

[pgdg11]
name=PostgreSQL 11 for RHEL / CentOS $releasever - $basearch
baseurl=http://download.postgresql.org/pub/repos/yum/11/redhat/rhel-$releasever-$basearch
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
repo_gpgcheck = 1

[pgdg10]
name=PostgreSQL 10 for RHEL / CentOS $releasever - $basearch
baseurl=http://download.postgresql.org/pub/repos/yum/10/redhat/rhel-$releasever-$basearch
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
repo_gpgcheck = 1

# PGDG RHEL / CentOS Updates Testing common repositories.

[pgdg-common-testing]
name=PostgreSQL common testing RPMs for RHEL / CentOS $releasever - $basearch
baseurl=https://download.postgresql.org/pub/repos/yum/testing/common/redhat/rhel-$releasever-$basearch
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
repo_gpgcheck = 1

# PGDG RHEL / CentOS Updates Testing repositories. (These packages should not be used in production)
# Available for 11 and above.

[pgdg16-updates-testing]
name=PostgreSQL 16 for RHEL / CentOS $releasever - $basearch - Updates testing
baseurl=https://download.postgresql.org/pub/repos/yum/testing/16/redhat/rhel-$releasever-$basearch
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
repo_gpgcheck = 1

[pgdg15-updates-testing]
name=PostgreSQL 15 for RHEL / CentOS $releasever - $basearch - Updates testing
baseurl=https://download.postgresql.org/pub/repos/yum/testing/15/redhat/rhel-$releasever-$basearch
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
repo_gpgcheck = 1

[pgdg14-updates-testing]
name=PostgreSQL 14 for RHEL / CentOS $releasever - $basearch - Updates testing
baseurl=https://download.postgresql.org/pub/repos/yum/testing/14/redhat/rhel-$releasever-$basearch
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
repo_gpgcheck = 1

[pgdg13-updates-testing]
name=PostgreSQL 13 for RHEL / CentOS $releasever - $basearch - Updates testing
baseurl=https://download.postgresql.org/pub/repos/yum/testing/13/redhat/rhel-$releasever-$basearch
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
repo_gpgcheck = 1

[pgdg12-updates-testing]
name=PostgreSQL 12 for RHEL / CentOS $releasever - $basearch - Updates testing
baseurl=https://download.postgresql.org/pub/repos/yum/testing/12/redhat/rhel-$releasever-$basearch
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
repo_gpgcheck = 1

[pgdg11-updates-testing]
name=PostgreSQL 11 for RHEL / CentOS $releasever - $basearch - Updates testing
baseurl=https://download.postgresql.org/pub/repos/yum/testing/11/redhat/rhel-$releasever-$basearch
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
repo_gpgcheck = 1

# PGDG Red Hat Enterprise Linux / CentOS SRPM testing common repository

[pgdg-source-common]
name=PostgreSQL 12 for RHEL / CentOS $releasever - $basearch - Source
baseurl=https://download.postgresql.org/pub/repos/yum/srpms/common/redhat/rhel-$releasever-$basearch
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
repo_gpgcheck = 1

# PGDG RHEL / CentOS testing common SRPM repository for all PostgreSQL versions

[pgdg-common-srpm-testing]
name=PostgreSQL common testing SRPMs for RHEL / CentOS $releasever - $basearch
baseurl=https://download.postgresql.org/pub/repos/yum/srpms/testing/common/redhat/rhel-$releasever-$basearch
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
repo_gpgcheck = 1

# PGDG Source RPMs (SRPM), and their testing repositories:

[pgdg15-source-updates-testing]
name=PostgreSQL 15 for RHEL / CentOS $releasever - $basearch - Source updates testing
failovermethod=priority
baseurl=https://download.postgresql.org/pub/repos/yum/srpms/testing/15/redhat/rhel-$releasever-$basearch
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
repo_gpgcheck = 1

[pgdg14-source-updates-testing]
name=PostgreSQL 14 for RHEL / CentOS $releasever - $basearch - Source updates testing
failovermethod=priority
baseurl=https://download.postgresql.org/pub/repos/yum/srpms/testing/14/redhat/rhel-$releasever-$basearch
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
repo_gpgcheck = 1

[pgdg13-source-updates-testing]
name=PostgreSQL 13 for RHEL / CentOS $releasever - $basearch - Source updates testing
failovermethod=priority
baseurl=https://download.postgresql.org/pub/repos/yum/srpms/testing/13/redhat/rhel-$releasever-$basearch
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
repo_gpgcheck = 1

[pgdg12-source]
name=PostgreSQL 12 for RHEL / CentOS $releasever - $basearch - Source
failovermethod=priority
baseurl=https://download.postgresql.org/pub/repos/yum/srpms/12/redhat/rhel-$releasever-$basearch
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
repo_gpgcheck = 1

[pgdg12-source-updates-testing]
name=PostgreSQL 12 for RHEL / CentOS $releasever - $basearch - Source update testing
failovermethod=priority
baseurl=https://download.postgresql.org/pub/repos/yum/srpms/testing/12/redhat/rhel-$releasever-$basearch
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
repo_gpgcheck = 1

[pgdg11-source]
name=PostgreSQL 11 for RHEL / CentOS $releasever - $basearch - Source
failovermethod=priority
baseurl=https://download.postgresql.org/pub/repos/yum/srpms/11/redhat/rhel-$releasever-$basearch
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
repo_gpgcheck = 1

[pgdg11-source-updates-testing]
name=PostgreSQL 11 for RHEL / CentOS $releasever - $basearch - Source update testing
failovermethod=priority
baseurl=https://download.postgresql.org/pub/repos/yum/srpms/testing/11/redhat/rhel-$releasever-$basearch
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
repo_gpgcheck = 1

[pgdg10-source]
name=PostgreSQL 10 for RHEL / CentOS $releasever - $basearch - Source
failovermethod=priority
baseurl=https://download.postgresql.org/pub/repos/yum/srpms/10/redhat/rhel-$releasever-$basearch
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
repo_gpgcheck = 1

# Debuginfo/debugsource packages for stable repos

[pgdg14-debuginfo]
name=PostgreSQL 14 for RHEL / CentOS $releasever - $basearch - Debuginfo
baseurl=https://download.postgresql.org/pub/repos/yum/debug/14/redhat/rhel-$releasever-$basearch
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
repo_gpgcheck = 1

[pgdg13-debuginfo]
name=PostgreSQL 13 for RHEL / CentOS $releasever - $basearch - Debuginfo
baseurl=https://download.postgresql.org/pub/repos/yum/debug/13/redhat/rhel-$releasever-$basearch
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
repo_gpgcheck = 1

[pgdg12-debuginfo]
name=PostgreSQL 12 for RHEL / CentOS $releasever - $basearch - Debuginfo
baseurl=https://download.postgresql.org/pub/repos/yum/debug/12/redhat/rhel-$releasever-$basearch
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
repo_gpgcheck = 1

[pgdg11-debuginfo]
name=PostgreSQL 11 for RHEL / CentOS $releasever - $basearch - Debuginfo
baseurl=https://download.postgresql.org/pub/repos/yum/debug/11/redhat/rhel-$releasever-$basearch
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
repo_gpgcheck = 1

[pgdg10-debuginfo]
name=PostgreSQL 10 for RHEL / CentOS $releasever - $basearch - Debuginfo
baseurl=https://download.postgresql.org/pub/repos/yum/debug/10/redhat/rhel-$releasever-$basearch
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
repo_gpgcheck = 1

# Debuginfo/debugsource packages for testing repos
# Available for 11 and above.

[pgdg15-updates-testing-debuginfo]
name=PostgreSQL 15 for RHEL / CentOS $releasever - $basearch - Debuginfo
baseurl=https://download.postgresql.org/pub/repos/yum/testing/debug/15/redhat/rhel-$releasever-$basearch
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
repo_gpgcheck = 1

[pgdg14-updates-testing-debuginfo]
name=PostgreSQL 14 for RHEL / CentOS $releasever - $basearch - Debuginfo
baseurl=https://download.postgresql.org/pub/repos/yum/testing/debug/14/redhat/rhel-$releasever-$basearch
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
repo_gpgcheck = 1

[pgdg13-updates-testing-debuginfo]
name=PostgreSQL 13 for RHEL / CentOS $releasever - $basearch - Debuginfo
baseurl=https://download.postgresql.org/pub/repos/yum/testing/debug/13/redhat/rhel-$releasever-$basearch
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
repo_gpgcheck = 1

[pgdg12-updates-testing-debuginfo]
name=PostgreSQL 12 for RHEL / CentOS $releasever - $basearch - Debuginfo
baseurl=https://download.postgresql.org/pub/repos/yum/testing/debug/12/redhat/rhel-$releasever-$basearch
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
repo_gpgcheck = 1

[pgdg11-updates-testing-debuginfo]
name=PostgreSQL 11 for RHEL / CentOS $releasever - $basearch - Debuginfo
baseurl=https://download.postgresql.org/pub/repos/yum/testing/debug/11/redhat/rhel-$releasever-$basearch
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
repo_gpgcheck = 1


[root@jh-post003 yum.repos.d]# yum clean all&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ PostGIS Install&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1664241244573&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;## 설치 가능 패키지 확인
[root@jh-post003 yum.repos.d]# yum search postgis*
Loaded plugins: fastestmirror
base                                                                     | 3.6 kB  00:00:00     
epel/x86_64/metalink                                                     | 6.9 kB  00:00:00     
epel                                                                     | 4.7 kB  00:00:00     
http://ftp.iij.ad.jp/pub/linux/Fedora/epel/7/x86_64/repodata/repomd.xml: [Errno -1] repomd.xml does not match metalink for epel
Trying other mirror.
epel                                                                     | 4.7 kB  00:00:00     
extras                                                                   | 2.9 kB  00:00:00     
pgdg-common/7/x86_64/signature                                           |  198 B  00:00:00     
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
Importing GPG key 0x442DF0F8:
Userid     : &quot;PostgreSQL RPM Building Project &amp;lt;pgsql-pkg-yum@postgresql.org&amp;gt;&quot;
Fingerprint: 68c9 e2b9 1a37 d136 fe74 d176 1f16 d2e1 442d f0f8
Package    : pgdg-redhat-repo-42.0-26.noarch (installed)
From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
Is this ok [y/N]: y
pgdg-common/7/x86_64/signature                                           | 2.9 kB  00:00:01 !!!
pgdg10/7/x86_64/signature                                                |  198 B  00:00:00     
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
Importing GPG key 0x442DF0F8:
Userid     : &quot;PostgreSQL RPM Building Project &amp;lt;pgsql-pkg-yum@postgresql.org&amp;gt;&quot;
Fingerprint: 68c9 e2b9 1a37 d136 fe74 d176 1f16 d2e1 442d f0f8
Package    : pgdg-redhat-repo-42.0-26.noarch (installed)
From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
Is this ok [y/N]: y
pgdg10/7/x86_64/signature                                                | 3.6 kB  00:00:02 !!!
pgdg11/7/x86_64/signature                                                |  198 B  00:00:00     
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
Importing GPG key 0x442DF0F8:
Userid     : &quot;PostgreSQL RPM Building Project &amp;lt;pgsql-pkg-yum@postgresql.org&amp;gt;&quot;
Fingerprint: 68c9 e2b9 1a37 d136 fe74 d176 1f16 d2e1 442d f0f8
Package    : pgdg-redhat-repo-42.0-26.noarch (installed)
From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
Is this ok [y/N]: y
pgdg11/7/x86_64/signature                                                | 3.6 kB  00:00:01 !!!
pgdg12/7/x86_64/signature                                                |  198 B  00:00:00     
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
Importing GPG key 0x442DF0F8:
Userid     : &quot;PostgreSQL RPM Building Project &amp;lt;pgsql-pkg-yum@postgresql.org&amp;gt;&quot;
Fingerprint: 68c9 e2b9 1a37 d136 fe74 d176 1f16 d2e1 442d f0f8
Package    : pgdg-redhat-repo-42.0-26.noarch (installed)
From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
Is this ok [y/N]: y
pgdg12/7/x86_64/signature                                                | 3.6 kB  00:00:00 !!!
pgdg13/7/x86_64/signature                                                |  198 B  00:00:00     
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
Importing GPG key 0x442DF0F8:
Userid     : &quot;PostgreSQL RPM Building Project &amp;lt;pgsql-pkg-yum@postgresql.org&amp;gt;&quot;
Fingerprint: 68c9 e2b9 1a37 d136 fe74 d176 1f16 d2e1 442d f0f8
Package    : pgdg-redhat-repo-42.0-26.noarch (installed)
From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
Is this ok [y/N]: y
pgdg13/7/x86_64/signature                                                | 3.6 kB  00:00:00 !!!
pgdg14/7/x86_64/signature                                                |  198 B  00:00:00     
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
Importing GPG key 0x442DF0F8:
Userid     : &quot;PostgreSQL RPM Building Project &amp;lt;pgsql-pkg-yum@postgresql.org&amp;gt;&quot;
Fingerprint: 68c9 e2b9 1a37 d136 fe74 d176 1f16 d2e1 442d f0f8
Package    : pgdg-redhat-repo-42.0-26.noarch (installed)
From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
Is this ok [y/N]: y
pgdg14/7/x86_64/signature                                                | 3.6 kB  00:00:02 !!!
update                                                                   | 2.9 kB  00:00:00     
(1/18): base/7/x86_64/group_gz                                           | 153 kB  00:00:00     
(2/18): base/7/x86_64/primary_db                                         | 6.1 MB  00:00:00     
(3/18): epel/x86_64/group_gz                                             |  97 kB  00:00:00     
(4/18): epel/x86_64/updateinfo                                           | 1.0 MB  00:00:00     
(5/18): extras/7/x86_64/primary_db                                       | 243 kB  00:00:00     
(6/18): epel/x86_64/primary_db                                           | 7.0 MB  00:00:00     
(7/18): pgdg10/7/x86_64/group_gz                                         |  245 B  00:00:00     
(8/18): pgdg12/7/x86_64/group_gz                                         |  245 B  00:00:00     
(9/18): pgdg11/7/x86_64/group_gz                                         |  245 B  00:00:01     
(10/18): pgdg10/7/x86_64/primary_db                                      | 393 kB  00:00:01     
(11/18): pgdg-common/7/x86_64/primary_db                                 | 163 kB  00:00:01     
(12/18): pgdg13/7/x86_64/primary_db                                      | 213 kB  00:00:00     
(13/18): pgdg13/7/x86_64/group_gz                                        |  246 B  00:00:00     
(14/18): pgdg11/7/x86_64/primary_db                                      | 430 kB  00:00:01     
(15/18): pgdg14/7/x86_64/group_gz                                        |  244 B  00:00:00     
(16/18): update/7/x86_64/primary_db                                      |  12 MB  00:00:00     
(17/18): pgdg14/7/x86_64/primary_db                                      | 131 kB  00:00:00     
(18/18): pgdg12/7/x86_64/primary_db                                      | 311 kB  00:00:01     
Determining fastest mirrors
* epel: mirror.misakamikoto.network
Warning: No matches found for: postgis*
No matches found





## 원하는 버전 설치 (30은 postgis 버전, 12는 postgresql버전 의미)
[root@jh-post003 ~]# yum -y install postgis30_12-3.0.4
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* epel: mirror.misakamikoto.network
Resolving Dependencies
--&amp;gt; Running transaction check
---&amp;gt; Package postgis30_12.x86_64 0:3.0.4-1.rhel7 will be installed
--&amp;gt; Processing Dependency: proj72 &amp;gt;= 7.2.1 for package: postgis30_12-3.0.4-1.rhel7.x86_64
--&amp;gt; Processing Dependency: geos39 &amp;gt;= 3.9.1 for package: postgis30_12-3.0.4-1.rhel7.x86_64
--&amp;gt; Processing Dependency: gdal33-libs &amp;gt;= 3.3.1 for package: postgis30_12-3.0.4-1.rhel7.x86_64
--&amp;gt; Processing Dependency: libprotobuf-c.so.1(LIBPROTOBUF_C_1.0.0)(64bit) for package: postgis30_12-3.0.4-1.rhel7.x86_64
--&amp;gt; Processing Dependency: libgeotiff16 for package: postgis30_12-3.0.4-1.rhel7.x86_64
--&amp;gt; Processing Dependency: SFCGAL for package: postgis30_12-3.0.4-1.rhel7.x86_64
--&amp;gt; Processing Dependency: libprotobuf-c.so.1()(64bit) for package: postgis30_12-3.0.4-1.rhel7.x86_64
--&amp;gt; Processing Dependency: libproj.so.19()(64bit) for package: postgis30_12-3.0.4-1.rhel7.x86_64
--&amp;gt; Processing Dependency: libgdal.so.29()(64bit) for package: postgis30_12-3.0.4-1.rhel7.x86_64
--&amp;gt; Processing Dependency: libSFCGAL.so.1()(64bit) for package: postgis30_12-3.0.4-1.rhel7.x86_64
--&amp;gt; Running transaction check
---&amp;gt; Package SFCGAL.x86_64 0:1.3.1-2.rhel7 will be installed
--&amp;gt; Processing Dependency: CGAL for package: SFCGAL-1.3.1-2.rhel7.x86_64
---&amp;gt; Package SFCGAL-libs.x86_64 0:1.3.1-2.rhel7 will be installed
--&amp;gt; Processing Dependency: libboost_serialization-mt.so.1.53.0()(64bit) for package: SFCGAL-libs-1.3.1-2.rhel7.x86_64
--&amp;gt; Processing Dependency: libboost_date_time-mt.so.1.53.0()(64bit) for package: SFCGAL-libs-1.3.1-2.rhel7.x86_64
---&amp;gt; Package gdal33-libs.x86_64 0:3.3.3-1.rhel7 will be installed
--&amp;gt; Processing Dependency: ogdi41 for package: gdal33-libs-3.3.3-1.rhel7.x86_64
--&amp;gt; Processing Dependency: libspatialite43-devel for package: gdal33-libs-3.3.3-1.rhel7.x86_64
--&amp;gt; Processing Dependency: libgeotiff16-devel for package: gdal33-libs-3.3.3-1.rhel7.x86_64
--&amp;gt; Processing Dependency: libzstd.so.1()(64bit) for package: gdal33-libs-3.3.3-1.rhel7.x86_64
--&amp;gt; Processing Dependency: libspatialite.so.7()(64bit) for package: gdal33-libs-3.3.3-1.rhel7.x86_64
--&amp;gt; Processing Dependency: libopenjp2.so.7()(64bit) for package: gdal33-libs-3.3.3-1.rhel7.x86_64
--&amp;gt; Processing Dependency: libogdi.so.4()(64bit) for package: gdal33-libs-3.3.3-1.rhel7.x86_64
---&amp;gt; Package geos39.x86_64 0:3.9.2-1.rhel7 will be installed
---&amp;gt; Package libgeotiff16.x86_64 0:1.6.0-6.rhel7 will be installed
---&amp;gt; Package proj72.x86_64 0:7.2.1-1.rhel7 will be installed
--&amp;gt; Processing Dependency: sqlite33 for package: proj72-7.2.1-1.rhel7.x86_64
---&amp;gt; Package protobuf-c.x86_64 0:1.0.2-3.el7 will be installed
--&amp;gt; Running transaction check
---&amp;gt; Package CGAL.x86_64 0:4.7-1.rhel7.1 will be installed
--&amp;gt; Processing Dependency: libGLU.so.1()(64bit) for package: CGAL-4.7-1.rhel7.1.x86_64
---&amp;gt; Package boost-date-time.x86_64 0:1.53.0-28.el7 will be installed
---&amp;gt; Package boost-serialization.x86_64 0:1.53.0-28.el7 will be installed
---&amp;gt; Package libgeotiff16-devel.x86_64 0:1.6.0-6.rhel7 will be installed
---&amp;gt; Package libspatialite43.x86_64 0:4.3.0a-15.rhel7 will be installed
---&amp;gt; Package libspatialite43-devel.x86_64 0:4.3.0a-15.rhel7 will be installed
---&amp;gt; Package libzstd.x86_64 0:1.5.2-1.el7 will be installed
---&amp;gt; Package ogdi41.x86_64 0:4.1.0-2.rhel7 will be installed
---&amp;gt; Package openjpeg2.x86_64 0:2.3.1-3.el7_7 will be installed
---&amp;gt; Package sqlite33.x86_64 0:3.30.1-6.rhel7 will be installed
--&amp;gt; Processing Dependency: sqlite33-libs = 3.30.1-6.rhel7 for package: sqlite33-3.30.1-6.rhel7.x86_64
--&amp;gt; Running transaction check
---&amp;gt; Package mesa-libGLU.x86_64 0:9.0.0-4.el7 will be installed
---&amp;gt; Package sqlite33-libs.x86_64 0:3.30.1-6.rhel7 will be installed
--&amp;gt; Finished Dependency Resolution

Dependencies Resolved

================================================================================================
Package                       Arch           Version                 Repository           Size
================================================================================================
Installing:
postgis30_12                  x86_64         3.0.4-1.rhel7           pgdg12              4.7 M
Installing for dependencies:
CGAL                          x86_64         4.7-1.rhel7.1           pgdg-common         254 k
SFCGAL                        x86_64         1.3.1-2.rhel7           pgdg-common          14 k
SFCGAL-libs                   x86_64         1.3.1-2.rhel7           pgdg-common         1.7 M
boost-date-time               x86_64         1.53.0-28.el7           base                 52 k
boost-serialization           x86_64         1.53.0-28.el7           base                169 k
gdal33-libs                   x86_64         3.3.3-1.rhel7           pgdg-common         7.9 M
geos39                        x86_64         3.9.2-1.rhel7           pgdg-common         646 k
libgeotiff16                  x86_64         1.6.0-6.rhel7           pgdg-common          94 k
libgeotiff16-devel            x86_64         1.6.0-6.rhel7           pgdg-common          29 k
libspatialite43               x86_64         4.3.0a-15.rhel7         pgdg-common         2.4 M
libspatialite43-devel         x86_64         4.3.0a-15.rhel7         pgdg-common          73 k
libzstd                       x86_64         1.5.2-1.el7             epel                282 k
mesa-libGLU                   x86_64         9.0.0-4.el7             base                196 k
ogdi41                        x86_64         4.1.0-2.rhel7           pgdg-common         218 k
openjpeg2                     x86_64         2.3.1-3.el7_7           base                153 k
proj72                        x86_64         7.2.1-1.rhel7           pgdg-common         2.5 M
protobuf-c                    x86_64         1.0.2-3.el7             base                 28 k
sqlite33                      x86_64         3.30.1-6.rhel7          pgdg-common         624 k
sqlite33-libs                 x86_64         3.30.1-6.rhel7          pgdg-common         550 k

Transaction Summary
================================================================================================
Install  1 Package (+19 Dependent packages)

Total download size: 22 M
Installed size: 106 M
Downloading packages:
(1/20): SFCGAL-1.3.1-2.rhel7.x86_64.rpm                                  |  14 kB  00:00:00     
(2/20): boost-date-time-1.53.0-28.el7.x86_64.rpm                         |  52 kB  00:00:00     
(3/20): boost-serialization-1.53.0-28.el7.x86_64.rpm                     | 169 kB  00:00:00     
(4/20): CGAL-4.7-1.rhel7.1.x86_64.rpm                                    | 254 kB  00:00:01     
(5/20): SFCGAL-libs-1.3.1-2.rhel7.x86_64.rpm                             | 1.7 MB  00:00:01     
(6/20): geos39-3.9.2-1.rhel7.x86_64.rpm                                  | 646 kB  00:00:00     
(7/20): libgeotiff16-1.6.0-6.rhel7.x86_64.rpm                            |  94 kB  00:00:00     
(8/20): gdal33-libs-3.3.3-1.rhel7.x86_64.rpm                             | 7.9 MB  00:00:01     
(9/20): libgeotiff16-devel-1.6.0-6.rhel7.x86_64.rpm                      |  29 kB  00:00:00     
(10/20): mesa-libGLU-9.0.0-4.el7.x86_64.rpm                              | 196 kB  00:00:00     
(11/20): libspatialite43-4.3.0a-15.rhel7.x86_64.rpm                      | 2.4 MB  00:00:00     
(12/20): openjpeg2-2.3.1-3.el7_7.x86_64.rpm                              | 153 kB  00:00:00     
(13/20): libspatialite43-devel-4.3.0a-15.rhel7.x86_64.rpm                |  73 kB  00:00:00     
(14/20): protobuf-c-1.0.2-3.el7.x86_64.rpm                               |  28 kB  00:00:00     
(15/20): ogdi41-4.1.0-2.rhel7.x86_64.rpm                                 | 218 kB  00:00:00     
(16/20): libzstd-1.5.2-1.el7.x86_64.rpm                                  | 282 kB  00:00:00     
(17/20): sqlite33-3.30.1-6.rhel7.x86_64.rpm                              | 624 kB  00:00:00     
(18/20): proj72-7.2.1-1.rhel7.x86_64.rpm                                 | 2.5 MB  00:00:00     
(19/20): sqlite33-libs-3.30.1-6.rhel7.x86_64.rpm                         | 550 kB  00:00:00     
(20/20): postgis30_12-3.0.4-1.rhel7.x86_64.rpm                           | 4.7 MB  00:00:03     
------------------------------------------------------------------------------------------------
Total                                                           3.0 MB/s |  22 MB  00:00:07     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : sqlite33-libs-3.30.1-6.rhel7.x86_64                                         1/20
  Installing : geos39-3.9.2-1.rhel7.x86_64                                                 2/20
  Installing : sqlite33-3.30.1-6.rhel7.x86_64                                              3/20
  Installing : proj72-7.2.1-1.rhel7.x86_64                                                 4/20
  Installing : libgeotiff16-1.6.0-6.rhel7.x86_64                                           5/20
  Installing : libspatialite43-4.3.0a-15.rhel7.x86_64                                      6/20
  Installing : libspatialite43-devel-4.3.0a-15.rhel7.x86_64                                7/20
  Installing : libgeotiff16-devel-1.6.0-6.rhel7.x86_64                                     8/20
  Installing : mesa-libGLU-9.0.0-4.el7.x86_64                                              9/20
  Installing : CGAL-4.7-1.rhel7.1.x86_64                                                  10/20
  Installing : ogdi41-4.1.0-2.rhel7.x86_64                                                11/20
  Installing : boost-date-time-1.53.0-28.el7.x86_64                                       12/20
  Installing : libzstd-1.5.2-1.el7.x86_64                                                 13/20
  Installing : boost-serialization-1.53.0-28.el7.x86_64                                   14/20
  Installing : SFCGAL-libs-1.3.1-2.rhel7.x86_64                                           15/20
  Installing : SFCGAL-1.3.1-2.rhel7.x86_64                                                16/20
  Installing : openjpeg2-2.3.1-3.el7_7.x86_64                                             17/20
  Installing : gdal33-libs-3.3.3-1.rhel7.x86_64                                           18/20
  Installing : protobuf-c-1.0.2-3.el7.x86_64                                              19/20
  Installing : postgis30_12-3.0.4-1.rhel7.x86_64                                          20/20
  Verifying  : protobuf-c-1.0.2-3.el7.x86_64                                               1/20
  Verifying  : openjpeg2-2.3.1-3.el7_7.x86_64                                              2/20
  Verifying  : libgeotiff16-1.6.0-6.rhel7.x86_64                                           3/20
  Verifying  : SFCGAL-1.3.1-2.rhel7.x86_64                                                 4/20
  Verifying  : gdal33-libs-3.3.3-1.rhel7.x86_64                                            5/20
  Verifying  : libspatialite43-4.3.0a-15.rhel7.x86_64                                      6/20
  Verifying  : libgeotiff16-devel-1.6.0-6.rhel7.x86_64                                     7/20
  Verifying  : SFCGAL-libs-1.3.1-2.rhel7.x86_64                                            8/20
  Verifying  : boost-serialization-1.53.0-28.el7.x86_64                                    9/20
  Verifying  : libspatialite43-devel-4.3.0a-15.rhel7.x86_64                               10/20
  Verifying  : proj72-7.2.1-1.rhel7.x86_64                                                11/20
  Verifying  : libzstd-1.5.2-1.el7.x86_64                                                 12/20
  Verifying  : sqlite33-3.30.1-6.rhel7.x86_64                                             13/20
  Verifying  : geos39-3.9.2-1.rhel7.x86_64                                                14/20
  Verifying  : boost-date-time-1.53.0-28.el7.x86_64                                       15/20
  Verifying  : postgis30_12-3.0.4-1.rhel7.x86_64                                          16/20
  Verifying  : ogdi41-4.1.0-2.rhel7.x86_64                                                17/20
  Verifying  : sqlite33-libs-3.30.1-6.rhel7.x86_64                                        18/20
  Verifying  : mesa-libGLU-9.0.0-4.el7.x86_64                                             19/20
  Verifying  : CGAL-4.7-1.rhel7.1.x86_64                                                  20/20

Installed:
  postgis30_12.x86_64 0:3.0.4-1.rhel7                                                           

Dependency Installed:
  CGAL.x86_64 0:4.7-1.rhel7.1                       SFCGAL.x86_64 0:1.3.1-2.rhel7              
  SFCGAL-libs.x86_64 0:1.3.1-2.rhel7                boost-date-time.x86_64 0:1.53.0-28.el7     
  boost-serialization.x86_64 0:1.53.0-28.el7        gdal33-libs.x86_64 0:3.3.3-1.rhel7         
  geos39.x86_64 0:3.9.2-1.rhel7                     libgeotiff16.x86_64 0:1.6.0-6.rhel7        
  libgeotiff16-devel.x86_64 0:1.6.0-6.rhel7         libspatialite43.x86_64 0:4.3.0a-15.rhel7   
  libspatialite43-devel.x86_64 0:4.3.0a-15.rhel7    libzstd.x86_64 0:1.5.2-1.el7               
  mesa-libGLU.x86_64 0:9.0.0-4.el7                  ogdi41.x86_64 0:4.1.0-2.rhel7              
  openjpeg2.x86_64 0:2.3.1-3.el7_7                  proj72.x86_64 0:7.2.1-1.rhel7              
  protobuf-c.x86_64 0:1.0.2-3.el7                   sqlite33.x86_64 0:3.30.1-6.rhel7           
  sqlite33-libs.x86_64 0:3.30.1-6.rhel7            

Complete!&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;■ Create Extension (에러별 해결방법)&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1664241662736&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;postgres=# CREATE EXTENSION postgis;
CREATE EXTENSION&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;※ 에러 발생 1&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1664241566569&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;postgres=# CREATE EXTENSION postgis;
ERROR:  could not open extension control file &quot;/postgresql/share/extension/postgis.control&quot;: No such file or directory&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;- 해결방법 -&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1664241576440&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;## postgis 파일 검색
※ yum 설치시 해당 경로로 파일 생성됨. DB를 해당 yum으로 설치했으면 그냥 이대로해도 되지만 바이너리로 설치시 base경로로 옮겨줘야함.
[root@jh-post003 share]# find / -name postgis.control
/usr/pgsql-12/share/extension/postgis.control


[root@jh-post003 share]# mv /usr/pgsql-12/share/extension/postgis.control /postgresql/share/extension/&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;※ 에러 발생 2&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1664241587285&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;postgres=# CREATE EXTENSION postgis;
ERROR:  extension &quot;postgis&quot; has no installation script nor update path for version &quot;3.0.4&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;- 해결방법 -&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1664241596054&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@s1833528f4ae ~]# cp -rp /usr/pgsql-12/share/extension/postgis* /postgresql/share/extension/
cp: overwrite &amp;lsquo;/postgresql/share/extension/postgis.control&amp;rsquo;? y&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;※ 에러 발생 3&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1664241608362&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;postgres=# CREATE EXTENSION postgis;
ERROR:  could not access file &quot;$libdir/postgis-3&quot;: No such file or directory&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;- 해결방법 -&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1664241617008&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@s1833528f4ae ~]# cp -rp /usr/pgsql-12/lib/postgis* /postgresql/lib/&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ 정상 설치 확인&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1664241682168&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;postgres=# SELECT name, default_version,installed_version FROM pg_available_extensions WHERE name LIKE 'postgis%' or name LIKE 'address%';
          name          | default_version | installed_version
------------------------+-----------------+-------------------
postgis                | 3.0.4           | 3.0.4
postgis_raster         | 3.0.4           |
postgis_sfcgal         | 3.0.4           |
postgis_tiger_geocoder | 3.0.4           |
postgis_topology       | 3.0.4           |
(5 rows)


postgres=# select PostGIS_Full_Version();
                                                                       postgis_full_version                                                                       
------------------------------------------------------------------------------------------------------------------------------------------------------------------
POSTGIS=&quot;3.0.4 0599561&quot; [EXTENSION] PGSQL=&quot;120&quot; GEOS=&quot;3.9.2-CAPI-1.14.3&quot; PROJ=&quot;7.2.1&quot; LIBXML=&quot;2.9.1&quot; LIBJSON=&quot;0.11&quot; LIBPROTOBUF=&quot;1.0.2&quot; WAGYU=&quot;0.4.3 (Internal)&quot;
(1 row)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;</description>
      <category>DataBase/PostgreSQL</category>
      <category>Plugin</category>
      <category>postgis</category>
      <category>PostgreSQL</category>
      <author>jeonghyun</author>
      <guid isPermaLink="true">https://jhdatabase.tistory.com/111</guid>
      <comments>https://jhdatabase.tistory.com/entry/PostgreSQL-PostGIS-%ED%94%8C%EB%9F%AC%EA%B7%B8%EC%9D%B8-%EC%84%A4%EC%B9%98#entry111comment</comments>
      <pubDate>Tue, 27 Sep 2022 10:23:39 +0900</pubDate>
    </item>
    <item>
      <title>[MySQL - phpMyAdmin 설치]</title>
      <link>https://jhdatabase.tistory.com/entry/MySQL-phpMyAdmin-%EC%84%A4%EC%B9%98</link>
      <description>&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #444444;&quot;&gt;phpMyAdmin&lt;/span&gt;&lt;span style=&quot;color: #444444;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #444444;&quot;&gt;은 PHP로 개발 된 오픈소스이고, 웹 기반의 MySQL 관리 툴 입니다. 웹에서 편리하게 DB 관리를 해보기 위해 이번 테스트를 진행했습니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt; &lt;span style=&quot;color: #444444;&quot;&gt;■ 사전 mysql db설치 &amp;amp; httpd설치&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;java&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;mysql&amp;gt; select @@version;
+-----------+
| @@version |
+-----------+
| 8.0.28&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|
+-----------+
1 row in set (0.00 sec)


[root@myadmin ~]# yum -y install epel-release

[root@myadmin ~]# yum -y install httpd&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: #444444;&quot;&gt;■ &lt;/span&gt;&lt;/b&gt;&lt;b&gt;php 설치&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;※ php설치할 당시 phpMyAdmin을 구동하기 위한 관련 패키지를 진행하지 않은 접속이 불가합니다. 따라서 나머지 php관련 모듈 설치&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1664237329146&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@myadmin www]# yum -y install php&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #444444;&quot;&gt;■ &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;httpd conf 추가&lt;/b&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;pre class=&quot;java&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;[root@myadmin ~]# vi /etc/httpd/conf/httpd.conf
...
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;157 &amp;lt;/Directory&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;158
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;159 #
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;160 # DirectoryIndex: sets the file that Apache will serve if a directory
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;161 # is requested.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;162 #
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;163 &amp;lt;IfModule dir_module&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;164&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DirectoryIndex index.html index.php&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; =&amp;gt;추가
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;165 &amp;lt;/IfModule&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;166
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;167 #&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: #444444;&quot;&gt;■ &lt;/span&gt;&lt;/b&gt;&lt;b&gt; 파일 생성 및 아래 내용 추가&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;java&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;[root@myadmin ~]# vi /var/www/html/index.php

&amp;lt;?php
phpinfo();
?&amp;gt;


[root@myadmin ~]# systemctl restart httpd.service&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ 브라우저 접속 php연동 확인&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;http://[서버IP]/index.php&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;863&quot; data-origin-height=&quot;874&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvpKs0/btrM7o0XYfw/pDuXzew6jOLLeZqgdGB0sk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvpKs0/btrM7o0XYfw/pDuXzew6jOLLeZqgdGB0sk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvpKs0/btrM7o0XYfw/pDuXzew6jOLLeZqgdGB0sk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvpKs0%2FbtrM7o0XYfw%2FpDuXzew6jOLLeZqgdGB0sk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;863&quot; height=&quot;874&quot; data-origin-width=&quot;863&quot; data-origin-height=&quot;874&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ phpmyadmin 설치&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;phpadmin은 보안상 이유로 로컬호스트만 접속 가능하게 제한되어 있습니다. 모두 접속 가능하게 설정.&lt;/span&gt;&lt;/div&gt;
&lt;pre class=&quot;java&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;[root@myadmin ~]# yum -y install phpmyadmin


## 아래 내용 추가
...(생략)
&amp;lt;Directory /usr/share/phpMyAdmin/&amp;gt;
&amp;nbsp;&amp;nbsp; AddDefaultCharset UTF-8
&amp;nbsp;&amp;nbsp; Require all granted

&amp;nbsp;&amp;nbsp; &amp;lt;IfModule mod_authz_core.c&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Apache 2.4
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;RequireAny&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Require ip 127.0.0.1
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Require ip ::1
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/RequireAny&amp;gt;
&amp;nbsp;&amp;nbsp; &amp;lt;/IfModule&amp;gt;
&amp;nbsp;&amp;nbsp; &amp;lt;IfModule !mod_authz_core.c&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Apache 2.2
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Order Deny,Allow
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Deny from All
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Allow from 127.0.0.1
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Allow from ::1
&amp;nbsp;&amp;nbsp; &amp;lt;/IfModule&amp;gt;
&amp;lt;/Directory&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ httpd.conf 수정&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;모든 ip접속 허용으로 수정&lt;/span&gt;&lt;/div&gt;
&lt;pre class=&quot;java&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;[root@myadmin ~]# vi /etc/httpd/conf/httpd.conf
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;101 #
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;102 &amp;lt;Directory /usr/share/phpMyAdmin&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;103&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AllowOverride none
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;104&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Require all granted
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;105 &amp;lt;/Directory&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;106
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;107 #



## httpd 재부팅
[root@myadmin ~]# systemctl restart httpd.service&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;※ httpd 접속 권한 설정 방법&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;아파치 버전 2.2 이하는 지시자 사용&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;pre class=&quot;java&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;[root@myadmin ~]# vi /etc/httpd/conf/httpd.conf
...
&amp;lt;Directory /usr/share/phpMyAdmin&amp;gt;
지시자 이용 IP 허용/차단 내용
&amp;lt;/Directory&amp;gt;
...&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;아파치 버전 2.4이후는 지시자 변경&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;Allow from all -&amp;gt; Require all granted&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;모두 접속 허용&lt;/div&gt;
&lt;div&gt;Deny from all -&amp;gt; Require all denied&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;모두 접속 금지&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;※&lt;/span&gt;&lt;span&gt;특정 IP 허용&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;Require ip [허용ip]&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;※&lt;/span&gt;&lt;span&gt;특정 IP 차당&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;Require&amp;nbsp; not ip [차단ip]&lt;/span&gt;&lt;/div&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ 접속 확인&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;[Public IP]/phpmyadmin&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;889&quot; data-origin-height=&quot;725&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c73vDR/btrM6bOP1eF/ll2fdc0iRVs7t7Gb8s6Mtk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c73vDR/btrM6bOP1eF/ll2fdc0iRVs7t7Gb8s6Mtk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c73vDR/btrM6bOP1eF/ll2fdc0iRVs7t7Gb8s6Mtk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc73vDR%2FbtrM6bOP1eF%2Fll2fdc0iRVs7t7Gb8s6Mtk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;889&quot; height=&quot;725&quot; data-origin-width=&quot;889&quot; data-origin-height=&quot;725&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; ■ 확인용 데이터 &lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;java&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;mysql&amp;gt; create database kim;
Query OK, 1 row affected (0.00 sec)

mysql&amp;gt; use kim;
Database changed

mysql&amp;gt; create table kim(i int);
Query OK, 0 rows affected (0.02 sec)

mysql&amp;gt; insert into kim values(1);
Query OK, 1 row affected (0.01 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt; ■ 확인 &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1912&quot; data-origin-height=&quot;665&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rt4Bn/btrM9PXBmLt/ntXxFemAmUdy66CqXOtKW0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rt4Bn/btrM9PXBmLt/ntXxFemAmUdy66CqXOtKW0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rt4Bn/btrM9PXBmLt/ntXxFemAmUdy66CqXOtKW0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Frt4Bn%2FbtrM9PXBmLt%2FntXxFemAmUdy66CqXOtKW0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1912&quot; height=&quot;665&quot; data-origin-width=&quot;1912&quot; data-origin-height=&quot;665&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: #444444;&quot;&gt;참고&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;a href=&quot;https://hoing.io/archives/375&quot;&gt;https://hoing.io/archives/375&lt;/a&gt;
&lt;figure id=&quot;og_1664236856499&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;웹 기반 MySQL 관리툴 - PHPMyAdmin 설치 및 설정&quot; data-og-description=&quot;웹 기반의 MySQL 관리툴phpMyAdmin 은 PHP로 개발 된 오픈소스이고, 웹 기반의 MySQL 관리 툴 입니다.사용하는 php 버전에 따라서 phpMyAdmin을 선택하셔서 설치하시면 됩니다. 1.31 Which PHP versions does phpMyAdmin&quot; data-og-host=&quot;hoing.io&quot; data-og-source-url=&quot;https://hoing.io/archives/375&quot; data-og-url=&quot;https://hoing.io/archives/375&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bXHHvZ/hyPVkm42SZ/jyFwF2XNTZqQPUXz9CY5W1/img.png?width=300&amp;amp;height=157&amp;amp;face=0_0_300_157,https://scrap.kakaocdn.net/dn/nuTcc/hyPVtYG5Ox/9fNBkV1RoZyBcuLQUM6TXK/img.png?width=300&amp;amp;height=157&amp;amp;face=0_0_300_157,https://scrap.kakaocdn.net/dn/S9Kie/hyPVktTh4l/9nikfYcLilgK4VDWkYePfk/img.png?width=1008&amp;amp;height=695&amp;amp;face=0_0_1008_695&quot;&gt;&lt;a href=&quot;https://hoing.io/archives/375&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://hoing.io/archives/375&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bXHHvZ/hyPVkm42SZ/jyFwF2XNTZqQPUXz9CY5W1/img.png?width=300&amp;amp;height=157&amp;amp;face=0_0_300_157,https://scrap.kakaocdn.net/dn/nuTcc/hyPVtYG5Ox/9fNBkV1RoZyBcuLQUM6TXK/img.png?width=300&amp;amp;height=157&amp;amp;face=0_0_300_157,https://scrap.kakaocdn.net/dn/S9Kie/hyPVktTh4l/9nikfYcLilgK4VDWkYePfk/img.png?width=1008&amp;amp;height=695&amp;amp;face=0_0_1008_695');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;웹 기반 MySQL 관리툴 - PHPMyAdmin 설치 및 설정&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;웹 기반의 MySQL 관리툴phpMyAdmin 은 PHP로 개발 된 오픈소스이고, 웹 기반의 MySQL 관리 툴 입니다.사용하는 php 버전에 따라서 phpMyAdmin을 선택하셔서 설치하시면 됩니다. 1.31 Which PHP versions does phpMyAdmin&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hoing.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;background-color: #ffffff; color: #444444;&quot;&gt;&lt;a href=&quot;https://docs.phpmyadmin.net/en/latest/faq.html&quot;&gt;https://docs.phpmyadmin.net/en/latest/faq.html&lt;/a&gt;&lt;/span&gt;
&lt;figure id=&quot;og_1664236880239&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;FAQ - Frequently Asked Questions &amp;mdash; phpMyAdmin 5.1.4 documentation&quot; data-og-description=&quot;1.1 My server is crashing each time a specific action is required or phpMyAdmin sends a blank page or a page full of cryptic characters to my browser, what can I do? Try to set the $cfg['OBGzip'] directive to false in your config.inc.php file and the zlib.&quot; data-og-host=&quot;docs.phpmyadmin.net&quot; data-og-source-url=&quot;https://docs.phpmyadmin.net/en/latest/faq.html&quot; data-og-url=&quot;https://docs.phpmyadmin.net/en/latest/faq.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://docs.phpmyadmin.net/en/latest/faq.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.phpmyadmin.net/en/latest/faq.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;FAQ - Frequently Asked Questions &amp;mdash; phpMyAdmin 5.1.4 documentation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;1.1 My server is crashing each time a specific action is required or phpMyAdmin sends a blank page or a page full of cryptic characters to my browser, what can I do? Try to set the $cfg['OBGzip'] directive to false in your config.inc.php file and the zlib.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.phpmyadmin.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;/div&gt;</description>
      <category>DataBase/MySQL &amp;amp; MariaDB</category>
      <category>mysql</category>
      <category>ncp</category>
      <category>php</category>
      <category>PHPMyAdmin</category>
      <author>jeonghyun</author>
      <guid isPermaLink="true">https://jhdatabase.tistory.com/110</guid>
      <comments>https://jhdatabase.tistory.com/entry/MySQL-phpMyAdmin-%EC%84%A4%EC%B9%98#entry110comment</comments>
      <pubDate>Tue, 27 Sep 2022 09:16:19 +0900</pubDate>
    </item>
    <item>
      <title>[MSSQL - NAS 네트워크 드라이브 연결]</title>
      <link>https://jhdatabase.tistory.com/entry/MSSQL-NAS-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EB%93%9C%EB%9D%BC%EC%9D%B4%EB%B8%8C-%EC%97%B0%EA%B2%B0</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;사전 작업&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NAS 생성 &amp;amp; 연결&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ NAS 생성 및 연결&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1126&quot; data-origin-height=&quot;590&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cx24Lb/btrKAsc2LNB/vmOKthjHtiBfIgsKkLNXQ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cx24Lb/btrKAsc2LNB/vmOKthjHtiBfIgsKkLNXQ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cx24Lb/btrKAsc2LNB/vmOKthjHtiBfIgsKkLNXQ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcx24Lb%2FbtrKAsc2LNB%2FvmOKthjHtiBfIgsKkLNXQ1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1126&quot; height=&quot;590&quot; data-origin-width=&quot;1126&quot; data-origin-height=&quot;590&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ NAS를 연결했음에도 MSSQL에서 데이터베이스 생성 시 NAS의 경로가 보이지 않습니다.&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1136&quot; data-origin-height=&quot;660&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cNWUJD/btrKwjolVQV/zXhXJkhVwpAdW5SgNlxPA0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cNWUJD/btrKwjolVQV/zXhXJkhVwpAdW5SgNlxPA0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cNWUJD/btrKwjolVQV/zXhXJkhVwpAdW5SgNlxPA0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcNWUJD%2FbtrKwjolVQV%2FzXhXJkhVwpAdW5SgNlxPA0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1136&quot; height=&quot;660&quot; data-origin-width=&quot;1136&quot; data-origin-height=&quot;660&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ xp_cmdshell 활성화&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661417905287&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;exec sp_configure 'show advanced options', 1;
go
reconfigure;
go


exec sp_configure 'xp_cmdshell',1
go
reconfigure;
go&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■&amp;nbsp;Fileserver&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;NAS의 경로, NAS유저&amp;nbsp;&lt;/span&gt;&lt;span&gt;패스워드&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; &lt;span&gt;NAS유저 ID&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1661417971562&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;exec xp_cmdshell 'net use E: \\&amp;lt;NAS IP&amp;gt;\n2370497_testjj11\data &amp;lt;NAS패스워드&amp;gt;  /USER:&amp;lt;NAS IP&amp;gt;\gwnupoc'

output
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
The command completed successfully.
NULL
NULL
(3개 행이 영향을 받음)
완료 시간: 2022-08-24T09:36:17.7487091+09:00&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ File list 확인&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;353&quot; data-origin-height=&quot;380&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vNJFC/btrKzZvAanw/rSPPMKQnd2zeBmYInvJjC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vNJFC/btrKzZvAanw/rSPPMKQnd2zeBmYInvJjC0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vNJFC/btrKzZvAanw/rSPPMKQnd2zeBmYInvJjC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvNJFC%2FbtrKzZvAanw%2FrSPPMKQnd2zeBmYInvJjC0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;353&quot; height=&quot;380&quot; data-origin-width=&quot;353&quot; data-origin-height=&quot;380&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ 새 데이터베이스 생성&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;NAS경로로 지정&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1053&quot; data-origin-height=&quot;658&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JNR4t/btrKxRynxVj/YC8KEtbwqs7NNaJCist990/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JNR4t/btrKxRynxVj/YC8KEtbwqs7NNaJCist990/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JNR4t/btrKxRynxVj/YC8KEtbwqs7NNaJCist990/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJNR4t%2FbtrKxRynxVj%2FYC8KEtbwqs7NNaJCist990%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1053&quot; height=&quot;658&quot; data-origin-width=&quot;1053&quot; data-origin-height=&quot;658&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ NAS경로에 데이터 파일 생성 확인&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1127&quot; data-origin-height=&quot;585&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bd06N5/btrKA3YpbY9/lKDKuOJXOBkN4e6lhFFE30/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bd06N5/btrKA3YpbY9/lKDKuOJXOBkN4e6lhFFE30/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bd06N5/btrKA3YpbY9/lKDKuOJXOBkN4e6lhFFE30/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbd06N5%2FbtrKA3YpbY9%2FlKDKuOJXOBkN4e6lhFFE30%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1127&quot; height=&quot;585&quot; data-origin-width=&quot;1127&quot; data-origin-height=&quot;585&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ xp_cmdshell 비활성화&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661418044349&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;exec sp_configure 'show advanced options', 0;
go
reconfigure;
go&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;■ 비활성화 여부 확인&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;763&quot; data-origin-height=&quot;232&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dLIrSN/btrKwiwhLCf/FQEisRc87Zj1Dfk1gk0INk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dLIrSN/btrKwiwhLCf/FQEisRc87Zj1Dfk1gk0INk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dLIrSN/btrKwiwhLCf/FQEisRc87Zj1Dfk1gk0INk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdLIrSN%2FbtrKwiwhLCf%2FFQEisRc87Zj1Dfk1gk0INk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;763&quot; height=&quot;232&quot; data-origin-width=&quot;763&quot; data-origin-height=&quot;232&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;※ 네트워크 드라이브 삭제 방법&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661418079366&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;EXEC XP_CMDSHELL 'net use E: /delete'&lt;/code&gt;&lt;/pre&gt;</description>
      <category>DataBase/MSSQL</category>
      <category>mssql</category>
      <category>nas</category>
      <category>ncp</category>
      <category>네트워크 스토리지 드라이브</category>
      <author>jeonghyun</author>
      <guid isPermaLink="true">https://jhdatabase.tistory.com/109</guid>
      <comments>https://jhdatabase.tistory.com/entry/MSSQL-NAS-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EB%93%9C%EB%9D%BC%EC%9D%B4%EB%B8%8C-%EC%97%B0%EA%B2%B0#entry109comment</comments>
      <pubDate>Thu, 25 Aug 2022 18:02:01 +0900</pubDate>
    </item>
    <item>
      <title>[MySQL - Online DDL] part 3 use. pt-online-change-schema</title>
      <link>https://jhdatabase.tistory.com/entry/MySQL-Online-DDL-part-3-pt-online-change-schema</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;pt-online-change-schema 이란,&lt;/b&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;Mysql에서 몇억건 이상의 대량의 데이터를 갖고 있는 테이블을 수정 하는것은 어렵습니다. &lt;/span&gt;&lt;span&gt;단순히 &lt;span&gt;alter table을 해버리면 4시간, 5시간 이상 수행되기 떄문에&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;이를 해결 하기 위해 create select(CTAS) 방법을 사용&lt;/span&gt;합니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;MySQL은 특히나 온라인 스키마 변경이 취약합니다. 물론&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;5.6부터는 online alter기능이 포함되어 있다고는 하나 100% 완벽하게 모든 상황을 온라인스럽게 제공해주지도 않고&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;그렇다하더라도, 일정 트래픽 이상의 데이터 변경이 이루어지는 경우, 게다가 슬레이브 지연을 염두한다면 꺼려지는 상황이 있습니다. (마스터에서 온라인 스키마 변경이 이루어졌을지라도, 이 관련 alter구문이 슬레이브로 넘어갔을 때는, alter이후 데이터 변경을 수행해야 하므로, 그만큼 복제 지연이 발생합니다.)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;사용 이유&lt;/b&gt; : &lt;/span&gt;&lt;span style=&quot;color: #444444;&quot;&gt;대상 테이블의 쓰기 잠금이 발생하는 경우가 있어서 일반적으로 온라인 상태에서의 테이블 스키마의 변경은 운영 중 항상 부담이 되고 DDL이 실행 되는 동안 정상적인 서비스가 불가능한 상태가 될수도 있었습니다. &lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #444444;&quot;&gt;또한 DDL 타임이 길어짐에 따라 Replication 지연이 발생 될 수도 있습니다. &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #444444;&quot;&gt;&lt;b&gt;&lt;u&gt;pt-online-schema-change 는 이러한 MySQL 의 Alter(DDL작업) 수행을 자동화(스크립트)하고 온라인으로 처리 될 수있도록 도움을 주는 도구&lt;/u&gt;&lt;/b&gt;입니다.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt; pt-online-change-schema 동작 방식 &lt;/b&gt;&lt;/blockquote&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;div&gt;&lt;span&gt;session parameter 변경 ( innodb_lock_wait_timeout / lock_wait_timeout / sql_mode 등 )&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;span&gt;외래키 확인&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;span&gt;TO-BE TABLE 생성&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;span&gt;TO-BE TABLE DDL 실행&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;span&gt;TRIGGER 생성&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;span&gt;insert into select 구문으로 data 이관&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;span&gt;trigger를 이용하여 AS-IS에서 발생했던 dml TO-BE TABLE 적용(&lt;/span&gt;&lt;span&gt;PT-OSC 의 수행 방식은 트리거를 활용하여 데이터를 복제하는 방식)&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;span&gt;RENAME TABLE&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ Perl 패키지 설치&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;rpm으로 설치하면 간편하지만, 가끔 rpm파일이 설치가 안될때가 있어 tar.gz으로 설치 진행&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661416687321&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@jh-mysql ~]# yum -y install perl-DBI perl-DBD-MySQL perl-TermReadKey perl perl-IO-Socket-SSL perl-Time-HiRes perl-devel&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;■ percona-toolkit 설치&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661416759054&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@jh-mysql ~]# wget percona.com/get/percona-toolkit.tar.gz

[root@jh-mysql ~]# tar -xvf percona-toolkit.tar.gz

[root@jh-mysql ~]# cd percona-toolkit-3.3.1/

[root@jh-mysql percona-toolkit-3.3.1]# perl ./Makefile.PL
Checking if your kit is complete...
Looks good
Writing Makefile for percona-toolkit


[root@jh-mysql percona-toolkit-3.3.1]# make &amp;amp;&amp;amp; make install
...(생략)
Installing /usr/local/bin/pt-slave-delay
Installing /usr/local/bin/pt-sift
Installing /usr/local/bin/pt-diskstats
Installing /usr/local/bin/pt-visual-explain
Installing /usr/local/bin/pt-pg-summary
Installing /usr/local/bin/pt-variable-advisor
Installing /usr/local/bin/pt-index-usage
Installing /usr/local/bin/pt-duplicate-key-checker
Installing /usr/local/bin/pt-config-diff
Installing /usr/local/bin/pt-stalk
Appending installation info to /usr/lib64/perl5/perllocal.pod&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ alias 설정&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661416771739&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@jh-mysql ~]# vi ~/.bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin:/mysql/bin

export PATH

alias pt-online-schema-change=&quot;/root/percona-toolkit-3.3.1/bin/pt-online-schema-change&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;■ test용 테이블 생성&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661416789226&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; create table test_tbl ( a int primary key auto_increment, b varchar(100), c varchar(100));
Query OK, 0 rows affected (0.02 sec)

mysql&amp;gt; insert into test_tbl select null, uuid(),uuid() from information_schema.columns as a, information_schema.columns as b limit 1000000;
Query OK, 1000000 rows affected (17.32 sec)
Records: 1000000  Duplicates: 0  Warnings: 0&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ 작업전 확인 사항&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;용량 확인 필요&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;PT-OSC 는 복제 테이블을 생성하고 작업을 하기 때문에 작업 대상 테이블(인덱스 포함) 사이즈 만큼의 공간이 추가로 필요&lt;/span&gt;&lt;/b&gt;합니다. 또한 작업 중에 binary log 또한 더 많이 생성되게 됩니다.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1661416851729&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; select sum(data_length+index_length)/1024/1024  from information_schema.tables where TABLE_NAME='test_tbl';
+-----------------------------------------+
| sum(data_length+index_length)/1024/1024 |
+-----------------------------------------+
|                            101.62500000 |
+-----------------------------------------+
1 row in set (0.00 sec)


## 데이터 파일 크기 확인
[root@jh-mysql kim]# du -sh /data/kim/test_tbl.ibd
113M    /data/kim/test_tbl.ibd



## 데이터 스토리지 여유 공간 확인
[root@jh-mysql kim]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda3       48G  6.7G   42G  14% /
devtmpfs        1.9G     0  1.9G   0% /dev
tmpfs           1.8G     0  1.8G   0% /dev/shm
tmpfs           1.8G  8.4M  1.8G   1% /run
tmpfs           1.8G     0  1.8G   0% /sys/fs/cgroup
tmpfs           354M     0  354M   0% /run/user/0&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;■ 기본 사용 예시&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;a href=&quot;https://www.percona.com/doc/percona-toolkit/LATEST/pt-online-schema-change.html&quot;&gt;https://www.percona.com/doc/percona-toolkit/LATEST/pt-online-schema-change.html&lt;/a&gt;&lt;/span&gt;
&lt;figure id=&quot;og_1661416871583&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;pt-online-schema-change&quot; data-og-description=&quot;pt-online-schema-change&quot; data-og-host=&quot;www.percona.com&quot; data-og-source-url=&quot;https://www.percona.com/doc/percona-toolkit/LATEST/pt-online-schema-change.html&quot; data-og-url=&quot;https://www.percona.com/doc/percona-toolkit/LATEST/pt-online-schema-change.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/e2xKz/hyPzuDHxoq/Clx806xJXe9SWHnBT5zTQk/img.png?width=700&amp;amp;height=206&amp;amp;face=0_0_700_206,https://scrap.kakaocdn.net/dn/7x88j/hyPzzrxNBO/i1hKJA9iDLWYssgaAU0XOK/img.png?width=700&amp;amp;height=206&amp;amp;face=0_0_700_206&quot;&gt;&lt;a href=&quot;https://www.percona.com/doc/percona-toolkit/LATEST/pt-online-schema-change.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.percona.com/doc/percona-toolkit/LATEST/pt-online-schema-change.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/e2xKz/hyPzuDHxoq/Clx806xJXe9SWHnBT5zTQk/img.png?width=700&amp;amp;height=206&amp;amp;face=0_0_700_206,https://scrap.kakaocdn.net/dn/7x88j/hyPzzrxNBO/i1hKJA9iDLWYssgaAU0XOK/img.png?width=700&amp;amp;height=206&amp;amp;face=0_0_700_206');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;pt-online-schema-change&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;pt-online-schema-change&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.percona.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;pre id=&quot;code_1661416880551&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pt-online-schema-change --alter &quot;변경할 Alter 정보&quot; D=데이터베이스,t=테이블명 \
--no-drop-old-table \
--no-drop-new-table \
--chunk-size=500 \
--chunk-size-limit=600 \
--defaults-file=/etc/my.cnf \
--host=127.0.0.1 \
--port=3306 \
--user=root \
--ask-pass \
--progress=time,30 \
--max-load=&quot;Threads_running=100&quot; \
--critical-load=&quot;Threads_running=1000&quot; \
--chunk-index=PRIMARY \
--charset=UTF8 \
--alter-foreign-keys-method=auto \
--preserve-triggers
--execute


* --no-drop-old-table
    * 마이그레이션 후, 기존 테이블을 삭제 하지 않겠다는 옵션 입니다.
* host, port, user
    * 스크립트를 실행할 대상 DB 정보입니다.
* chunk-size
    * 한번에 복사할 데이터양을 얘기합니다. 데이터를 복사하는 단위 인 chunk 사이즈를 줄여서 데이터를 조금씩 복사(데이터 건 수를 줄여서)하여 MySQL의 부하를 낮추거나 IOPS 가 높은 스토리지 시스템을 통해서 새벽 시간때 작업할 경우 빠른 작업 완료를 위해 chunk 사이즈를 증가 시켜서 사용할 수도 있는 옵션입니다. chunk-size-limit=1 : chunk-size 의 max 배수값, 기본값 4.0
* --charset=UTF8
    * 필수로 넣으셔야 합니다.
    * 안넣을 경우 한글명 데이터들이 이관하면서 깨지는 경우가 생깁니다.
* --alter-foreign-keys-method=auto
    * FK도 복사할것인지 여부입니다.
    * 옵션값이 auto일 경우 최적화된 방식으로 FK를 복사합니다.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;■ OSC 이용 테이블 컬럼 추가&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661416905849&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@jh-mysql ~]# pt-online-schema-change --execute \
--recursion-method=none \
--host=localhost \
--defaults-file=/etc/my.cnf \
--chunk-size=500 --chunk-size-limit=1 \
--chunk-index=PRIMARY \
--sleep=0.1 --progress=time,10 \
--port=3306 --charset=UTF8 \
--user=root --ask-pass \
--alter &quot;add column newcolumn varchar(30)&quot; \
D=kim,t=test_tbl

No slaves found.  See --recursion-method if host jh-mysql has slaves.
Not checking slave lag because no slaves were found and --check-slave-lag was not specified.
*******************************************************************
Using the default of SSL_verify_mode of SSL_VERIFY_NONE for client
is deprecated! Please set SSL_verify_mode to SSL_VERIFY_PEER
possibly with SSL_ca_file|SSL_ca_path for verification.
If you really don't want to verify the certificate and keep the
connection open to Man-In-The-Middle attacks please set
SSL_verify_mode explicitly to SSL_VERIFY_NONE in your application.
*******************************************************************
  at /root/percona-toolkit-3.3.1/bin/pt-online-schema-change line 7119.
*******************************************************************
Using the default of SSL_verify_mode of SSL_VERIFY_NONE for client
is deprecated! Please set SSL_verify_mode to SSL_VERIFY_PEER
possibly with SSL_ca_file|SSL_ca_path for verification.
If you really don't want to verify the certificate and keep the
connection open to Man-In-The-Middle attacks please set
SSL_verify_mode explicitly to SSL_VERIFY_NONE in your application.
*******************************************************************
  at /root/percona-toolkit-3.3.1/bin/pt-online-schema-change line 7119.

# A software update is available:
Operation, tries, wait:
  analyze_table, 10, 1
  copy_rows, 10, 0.25
  create_triggers, 10, 1
  drop_triggers, 10, 1
  swap_tables, 10, 1
  update_foreign_keys, 10, 1
Altering `kim`.`test_tbl`...
Creating new table...
Created new table kim._test_tbl_new OK.
Altering new table...
Altered `kim`.`_test_tbl_new` OK.
2022-08-19T14:19:22 Creating triggers...
2022-08-19T14:19:22 Created triggers OK.
2022-08-19T14:19:22 Copying approximately 993705 rows...
Copying `kim`.`test_tbl`:   4% 03:49 remain
Copying `kim`.`test_tbl`:   8% 03:28 remain
Copying `kim`.`test_tbl`:  13% 03:16 remain
Copying `kim`.`test_tbl`:  17% 03:05 remain
Copying `kim`.`test_tbl`:  22% 02:54 remain
Copying `kim`.`test_tbl`:  26% 02:43 remain
Copying `kim`.`test_tbl`:  31% 02:33 remain
Copying `kim`.`test_tbl`:  35% 02:22 remain
Copying `kim`.`test_tbl`:  40% 02:12 remain
Copying `kim`.`test_tbl`:  44% 02:02 remain
Copying `kim`.`test_tbl`:  49% 01:52 remain
Copying `kim`.`test_tbl`:  53% 01:42 remain
Copying `kim`.`test_tbl`:  58% 01:32 remain
Copying `kim`.`test_tbl`:  62% 01:22 remain
Copying `kim`.`test_tbl`:  67% 01:12 remain
Copying `kim`.`test_tbl`:  72% 01:02 remain
Copying `kim`.`test_tbl`:  76% 00:52 remain
Copying `kim`.`test_tbl`:  81% 00:42 remain
Copying `kim`.`test_tbl`:  85% 00:32 remain
Copying `kim`.`test_tbl`:  89% 00:22 remain
Copying `kim`.`test_tbl`:  94% 00:12 remain
Copying `kim`.`test_tbl`:  98% 00:02 remain
2022-08-19T14:23:06 Copied rows OK.
2022-08-19T14:23:06 Analyzing new table...
2022-08-19T14:23:06 Swapping tables...
2022-08-19T14:23:06 Swapped original and new tables OK.
2022-08-19T14:23:06 Dropping old table...
2022-08-19T14:23:06 Dropped old table `kim`.`_test_tbl_old` OK.
2022-08-19T14:23:06 Dropping triggers...
2022-08-19T14:23:06 Dropped triggers OK.
Successfully altered `kim`.`test_tbl`.



## 생성 확인
mysql&amp;gt; desc kim.test_tbl;
+-----------+--------------+------+-----+---------+----------------+
| Field     | Type         | Null | Key | Default | Extra          |
+-----------+--------------+------+-----+---------+----------------+
| a         | int          | NO   | PRI | NULL    | auto_increment |
| b         | varchar(100) | YES  |     | NULL    |                |
| c         | varchar(100) | YES  |     | NULL    |                |
| newcolumn | varchar(30)  | YES  |     | NULL    |                |
+-----------+--------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)



※ 아래 에러 발생 시 1
Can't locate Digest/MD5.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /root/percona-toolkit-3.3.1/bin/pt-online-schema-change line 6340.
BEGIN failed--compilation aborted at /root/percona-toolkit-3.3.1/bin/pt-online-schema-change line 6340.

패키지 설치
[root@jh-mysql ~]# yum install perl-Digest-MD5



※ 아래 에러 발생 시 2
Cannot connect to MySQL: DBI connect('kim;mysql_read_default_file=/etc/my.cnf;host=localhost;charset=UTF8;mysql_read_default_group=client','root',...) failed: Authentication plugin 'caching_sha2_password' cannot be loaded: /usr/lib64/mysql/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory at /root/percona-toolkit-3.3.1/bin/pt-online-schema-change line 2345.


mysql_native_password 옵션 사용
mysql&amp;gt; alter user root@localhost identified with mysql_native_password by 'root';


※ replication 구조일 시 
복제 구성 환경에서는 실행하는 서버에서 -&amp;gt; Replica(slave) MySQL 로 접속이 가능해야 합니다.
slave에 접속하지 못하는 경우(예: CloudDB for MySQL) 에는 --recursion-method=none 옵션 사용&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;■&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;임시 테이블 확인&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;OSC 작업진행되는 생성되는 임시테이블 확인&lt;/span&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1661416938038&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; show tables;
+---------------+
| Tables_in_kim |
+---------------+
| _test_tbl_new |
| test_tbl      |
+---------------+
2 rows in set (0.00 sec)


## 데이터파일 생성 확인
[root@jh-mysql ~]# du -sh /data/kim/*
113M    /data/kim/test_tbl.ibd
112M    /data/kim/_test_tbl_new.ibd&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ 추가작업 예시 (alter구문만 수정하여 사용)&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661416960926&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;## 컬럼 삭제
pt-online-schema-change --execute \
--recursion-method=none \
--host=localhost \
--defaults-file=/etc/my.cnf \
--chunk-size=500 --chunk-size-limit=1 \
--chunk-index=PRIMARY \
--sleep=0.1 --progress=time,10 \
--port=3306 --charset=UTF8 \
--user=root --ask-pass \
--alter &quot;drop column newcolumn&quot; \
D=kim,t=test_tbl



## b,c 컬럼 인덱스 생성
pt-online-schema-change --execute \
--recursion-method=none \
--host=localhost \
--defaults-file=/etc/my.cnf \
--chunk-size=500 --chunk-size-limit=1 \
--chunk-index=PRIMARY \
--sleep=0.1 --progress=time,10 \
--port=3306 --charset=UTF8 \
--user=root --ask-pass \
--alter &quot;add index idx_test_1(b,c)&quot; \
D=kim,t=test_tbl



## 인덱스 삭제
pt-online-schema-change --execute \
--recursion-method=none \
--host=localhost \
--defaults-file=/etc/my.cnf \
--chunk-size=500 --chunk-size-limit=1 \
--chunk-index=PRIMARY \
--sleep=0.1 --progress=time,10 \
--port=3306 --charset=UTF8 \
--user=root --ask-pass \
--alter &quot;drop index idx_test_1&quot; \
D=kim,t=test_tbl&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;※ SUPER 권한 없을 시&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;NCP의 CloudDB for MySQL이나 AWS RDS와 같은 클라우드 서비스형 DB에서는 SUPER권한이 제외되어 있습니다. 따라서 SUPER권한 관련 에러가 발생 할 수 있습니다.&lt;/span&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1661416978928&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;db do failed: You do not have the SUPER privilege and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)[for Statement &quot;CREATE TRIGGER `pt_osc_...`]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;해결 방법&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;아래 파라미터를 ON으로 설정, 동적 변수이기 때문에 재기동 없이 변경 가능.&lt;/span&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1661417014598&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; show variables like 'log_bin_trust_function_creators';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| log_bin_trust_function_creators | OFF   |
+---------------------------------+-------+
1 row in set (0.00 sec)


mysql&amp;gt; set global log_bin_trust_function_creators=ON;
Query OK, 0 rows affected (0.00 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1594&quot; data-origin-height=&quot;92&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uVOAq/btrKzYXExxA/fZ6xSPIT2UUu6WECHGkmEK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uVOAq/btrKzYXExxA/fZ6xSPIT2UUu6WECHGkmEK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uVOAq/btrKzYXExxA/fZ6xSPIT2UUu6WECHGkmEK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuVOAq%2FbtrKzYXExxA%2FfZ6xSPIT2UUu6WECHGkmEK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1594&quot; height=&quot;92&quot; data-origin-width=&quot;1594&quot; data-origin-height=&quot;92&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;참고&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;&lt;a href=&quot;https://gywn.net/2016/09/pt-online-schema-change-pk-change-problem/&quot;&gt;https://gywn.net/2016/09/pt-online-schema-change-pk-change-problem/&lt;/a&gt;&lt;/span&gt;
&lt;figure id=&quot;og_1661416120007&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;pt-online-schema-change에 숨겨진 무시무시한 이슈! &amp;ndash; gywndi's database&quot; data-og-description=&quot;Overview 최근들어 거의 연단위로 블로깅을 하나씩 올리는 듯 하는군요. 여기저기 시국이 어지럽고, 바쁘다는 말도 안되는 핑계를 무마시키기 위해.. 아무튼 간만에 블로깅 하나 올려봅니다. MySQL&quot; data-og-host=&quot;gywn.net&quot; data-og-source-url=&quot;https://gywn.net/2016/09/pt-online-schema-change-pk-change-problem/&quot; data-og-url=&quot;https://gywn.net/2016/09/pt-online-schema-change-pk-change-problem/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/kGCth/hyPzjPLIQ5/fxK3zqQX5ERguZO2tGHtLk/img.png?width=571&amp;amp;height=341&amp;amp;face=0_0_571_341&quot;&gt;&lt;a href=&quot;https://gywn.net/2016/09/pt-online-schema-change-pk-change-problem/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://gywn.net/2016/09/pt-online-schema-change-pk-change-problem/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/kGCth/hyPzjPLIQ5/fxK3zqQX5ERguZO2tGHtLk/img.png?width=571&amp;amp;height=341&amp;amp;face=0_0_571_341');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;pt-online-schema-change에 숨겨진 무시무시한 이슈! &amp;ndash; gywndi's database&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Overview 최근들어 거의 연단위로 블로깅을 하나씩 올리는 듯 하는군요. 여기저기 시국이 어지럽고, 바쁘다는 말도 안되는 핑계를 무마시키기 위해.. 아무튼 간만에 블로깅 하나 올려봅니다. MySQL&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;gywn.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;a href=&quot;https://jojoldu.tistory.com/358&quot;&gt;https://jojoldu.tistory.com/358&lt;/a&gt;&lt;/span&gt;
&lt;figure id=&quot;og_1661416121816&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[mysql] Percona pt-online-schema-change 설치 및 사용하기&quot; data-og-description=&quot;Mysql에서 몇억건 이상의 대량의 데이터를 갖고 있는 테이블을 수정 하는것은 쉬운일이 아닙니다. 단순히 alter table 을 해버리면 4시간, 5시간 이상 수행되기 떄문인데요. 이를 해결 하기 위해 create&quot; data-og-host=&quot;jojoldu.tistory.com&quot; data-og-source-url=&quot;https://jojoldu.tistory.com/358&quot; data-og-url=&quot;https://jojoldu.tistory.com/358&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/br3A4A/hyPzvJlFQA/VBkGD67thxc0bCyWwgdXDk/img.png?width=800&amp;amp;height=292&amp;amp;face=0_0_800_292,https://scrap.kakaocdn.net/dn/jFYHS/hyPzoKeR8X/wsI4xKWvceAI6HKlEkR1Lk/img.png?width=800&amp;amp;height=292&amp;amp;face=0_0_800_292,https://scrap.kakaocdn.net/dn/cnKsDC/hyPzjIZgJ6/TYd395Imn4XlBQaiez0vqk/img.png?width=1676&amp;amp;height=1474&amp;amp;face=0_0_1676_1474&quot;&gt;&lt;a href=&quot;https://jojoldu.tistory.com/358&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://jojoldu.tistory.com/358&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/br3A4A/hyPzvJlFQA/VBkGD67thxc0bCyWwgdXDk/img.png?width=800&amp;amp;height=292&amp;amp;face=0_0_800_292,https://scrap.kakaocdn.net/dn/jFYHS/hyPzoKeR8X/wsI4xKWvceAI6HKlEkR1Lk/img.png?width=800&amp;amp;height=292&amp;amp;face=0_0_800_292,https://scrap.kakaocdn.net/dn/cnKsDC/hyPzjIZgJ6/TYd395Imn4XlBQaiez0vqk/img.png?width=1676&amp;amp;height=1474&amp;amp;face=0_0_1676_1474');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[mysql] Percona pt-online-schema-change 설치 및 사용하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Mysql에서 몇억건 이상의 대량의 데이터를 갖고 있는 테이블을 수정 하는것은 쉬운일이 아닙니다. 단순히 alter table 을 해버리면 4시간, 5시간 이상 수행되기 떄문인데요. 이를 해결 하기 위해 create&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;jojoldu.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #777777;&quot;&gt;&lt;a href=&quot;https://hoing.io/archives/10871&quot;&gt;https://hoing.io/archives/10871&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1665014596702&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;MySQL - Percona Toolkit - PT-ONLINE-SCHEMA-CHANGE&quot; data-og-description=&quot; &quot; data-og-host=&quot;hoing.io&quot; data-og-source-url=&quot;https://hoing.io/archives/10871&quot; data-og-url=&quot;https://hoing.io/archives/10871&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/r3vlU/hyP19MtPI8/YAp87OYgiq8Z9KTbazYSaK/img.png?width=700&amp;amp;height=206&amp;amp;face=0_0_700_206,https://scrap.kakaocdn.net/dn/vrXsq/hyP17A86BW/XBsVb1TqEwxz07T1y6q1CK/img.png?width=700&amp;amp;height=206&amp;amp;face=0_0_700_206,https://scrap.kakaocdn.net/dn/YdDbE/hyP2fzbdE7/BHsEE4HBlLT8v3soRGkMFK/img.png?width=610&amp;amp;height=500&amp;amp;face=0_0_610_500&quot;&gt;&lt;a href=&quot;https://hoing.io/archives/10871&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://hoing.io/archives/10871&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/r3vlU/hyP19MtPI8/YAp87OYgiq8Z9KTbazYSaK/img.png?width=700&amp;amp;height=206&amp;amp;face=0_0_700_206,https://scrap.kakaocdn.net/dn/vrXsq/hyP17A86BW/XBsVb1TqEwxz07T1y6q1CK/img.png?width=700&amp;amp;height=206&amp;amp;face=0_0_700_206,https://scrap.kakaocdn.net/dn/YdDbE/hyP2fzbdE7/BHsEE4HBlLT8v3soRGkMFK/img.png?width=610&amp;amp;height=500&amp;amp;face=0_0_610_500');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;MySQL - Percona Toolkit - PT-ONLINE-SCHEMA-CHANGE&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hoing.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>DataBase/MySQL &amp;amp; MariaDB</category>
      <author>jeonghyun</author>
      <guid isPermaLink="true">https://jhdatabase.tistory.com/108</guid>
      <comments>https://jhdatabase.tistory.com/entry/MySQL-Online-DDL-part-3-pt-online-change-schema#entry108comment</comments>
      <pubDate>Thu, 25 Aug 2022 17:51:36 +0900</pubDate>
    </item>
    <item>
      <title>[MySQL - Online DDL] part 2. 실습</title>
      <link>https://jhdatabase.tistory.com/entry/MySQL-Online-DDL-part-2-%EC%8B%A4%EC%8A%B5</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;Online DDL 작업 정보 계측 memory&lt;/b&gt;&lt;/blockquote&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;※ 사전 조건&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;performance_schema=ON&lt;/span&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1661415094829&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;MariaDB [(none)]&amp;gt; show variables like 'performance_schema';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| performance_schema | ON    |
+--------------------+-------+&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ P&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;erformance_schmea.setup_instruments 조회&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1661415094830&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; select substring_index(name,'/',1) as cate, count(*) as cnt from performance_schema.setup_instruments group by substring_index(name,'/',1);
+-------------+-----+
| cate        | cnt |
+-------------+-----+
| wait        | 393 |
| idle        |   1 |
| stage       | 131 |
| statement   | 213 |
| transaction |   1 |
| memory      | 497 |
| error       |   1 |
+-------------+-----+
7 rows in set (0.00 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;■ sample data insert&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661415458651&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; create table test_tbl ( a int primary key auto_increment, b varchar(100), c varchar(100));

mysql&amp;gt; insert into test_tbl select null, uuid(),uuid() from information_schema.columns as a, information_schema.columns as b limit 1000000;&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;■ 해당 테이블에 alter 사항을 모니터링 하기 위한 performance schema 셋팅 정보 변경&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1661415474894&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- alter 작업을 위한 setup_instruments 를 Enable 시킨다.
mysql&amp;gt; update performance_schema.setup_instruments set enabled='YES' where name like 'stage/innodb/alter%';
Query OK, 0 rows affected (0.00 sec)
Rows matched: 8  Changed: 0  Warnings: 0


-- events_stages_%의 setup_consumers를 Enable시켜 각각의 alter stage를 모니터링 한다.
mysql&amp;gt; update performance_schema.setup_consumers set enabled='YES' where name like 'events_stage%';
Query OK, 3 rows affected (0.01 sec)
Rows matched: 3  Changed: 3  Warnings: 0&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;■&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;aleter 작업&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;새로운 컬럼 추가&amp;nbsp;&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661415488636&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; ALTER TABLE test_tbl ADD COLUMN x INT;
Query OK, 0 rows affected (6.063 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql&amp;gt; ALTER TABLE test_tbl DROP COLUMN x;
Query OK, 0 rows affected (12.40 sec)
Records: 0  Duplicates: 0  Warnings: 0&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;■&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #666666;&quot;&gt;alter&lt;/span&gt;&lt;span style=&quot;color: #666666;&quot;&gt;작업이 진행 중에는&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;e&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;vents_stages_current&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;테이블에서&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;확인 가능&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661415508574&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT esc.THREAD_ID
, esc.SQL_TEXT
, estc.EVENT_NAME
, estc.WORK_COMPLETED AS '완료 작업 수'
, estc.WORK_ESTIMATED AS '전체 작업 수'
, CONCAT(
     ROUND(
         @PROGRESS := estc.WORK_COMPLETED/WORK_ESTIMATED * 100,
         2),
      &quot;%&quot;) AS &quot;진척률&quot;
, sys.format_time(
     @ELAPSED := (estc.TIMER_END - estc.TIMER_START)
     ) AS '실행 시간'
, sys.format_time(
     @REMAIN := FLOOR(@ELAPSED * (100/@PROGRESS) - @ELAPSED)
     ) AS '남은 시간'
, DATE_FORMAT(
     NOW() + INTERVAL @REMAIN/POWER(10,12)  SECOND,
     '%Y년 %m 월 %d 일 %H:%i:%s'
     )  AS  '종료 예상 시간'
, ROUND(estc.WORK_COMPLETED / (@ELAPSED/POWER(10,12)),0)  AS  '초 당 처리 작업 수'
FROM performance_schema.events_statements_current AS esc
INNER JOIN performance_schema.events_stages_current AS estc
ON estc.THREAD_ID = esc.THREAD_ID
WHERE estc.NESTING_EVENT_ID = esc.EVENT_ID
\G;

*************************** 1. row ***************************
                THREAD_ID: 45
                 SQL_TEXT: ALTER TABLE test_tbl DROP COLUMN x
               EVENT_NAME: stage/innodb/alter table (read PK and internal sort)
        완료 작업 수: 12834
        전체 작업 수: 28849
                진척률: 44.49%
            실행 시간: 7.27 s
            남은 시간: 9.07 s
     종료 예상 시간: 2022년 08 월 17 일 16:31:11
초 당 처리 작업 수: 1765
1 row in set, 3 warnings (0.00 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;■ 작업 완료 이후 events_stages_history_long에서 해당 작업 순서대로 작업 및 시간 확인 가능.&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661415531843&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT sesh.EVENT_ID
, sesh.NESTING_EVENT_ID
, esh.SQL_TEXT
, sesh.EVENT_NAME
, sesh.WORK_ESTIMATED AS '작업 수'
, sys.format_time(sesh.TIMER_WAIT) AS '작업 시간'
FROM performance_schema.events_stages_history_long AS sesh
INNER JOIN performance_schema.events_statements_history AS esh
ON sesh.NESTING_EVENT_ID = esh.EVENT_ID
ORDER BY sesh.NESTING_EVENT_ID, sesh.TIMER_START;
+----------+------------------+------------------------------------+------------------------------------------------------+------------+---------------+
| EVENT_ID | NESTING_EVENT_ID | SQL_TEXT                           | EVENT_NAME                                           | 작업 수     | 작업 시간     |
+----------+------------------+------------------------------------+------------------------------------------------------+------------+---------------+
|       36 |               34 | ALTER TABLE test_tbl DROP COLUMN x | stage/innodb/alter table (read PK and internal sort) |      28849 | 12.34 s       |
|       37 |               34 | ALTER TABLE test_tbl DROP COLUMN x | stage/innodb/alter table (end)                       |      28849 | 2.44 us       |
|       38 |               34 | ALTER TABLE test_tbl DROP COLUMN x | stage/innodb/alter table (read PK and internal sort) |          0 | 81.2 us       |
|       39 |               34 | ALTER TABLE test_tbl DROP COLUMN x | stage/innodb/alter table (end)                       |          0 | 4.12 us       |
|       40 |               34 | ALTER TABLE test_tbl DROP COLUMN x | stage/innodb/alter table (log apply table)           |        384 | 192.01 us     |
|       41 |               34 | ALTER TABLE test_tbl DROP COLUMN x | stage/innodb/alter table (end)                       |        384 | 47.45 us      |
|       42 |               34 | ALTER TABLE test_tbl DROP COLUMN x | stage/innodb/alter table (log apply table)           |        768 | 16.32 ms      |
+----------+------------------+------------------------------------+------------------------------------------------------+------------+---------------+
7 rows in set (0.01 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;■ 현재 사용중인 메모리 양 확인&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;memory 카테고리의 instruments는 계측하는 구조가 없기 때문에 위의 사용법으로는 계측하기가 어렵습니다.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하지만 sys.x$memory_global_by_current_bytes 를 제공해 주기 때문에 메모리의 사용양 등을 확인 가능&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1661415594356&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT SUBSTRING_INDEX(event_name,'/',2) AS code_area
, FORMAT_BYTES(SUM(current_alloc)) AS current_alloc
FROM sys.x$memory_global_by_current_bytes
GROUP BY SUBSTRING_INDEX(event_name,'/',2)
ORDER BY SUBSTRING_INDEX(event_name,'/',2) DESC;

+---------------------------+---------------+
| code_area                 | current_alloc |
+---------------------------+---------------+
| memory/vio                | 2.23 KiB      |
| memory/temptable          | 2.00 MiB      |
| memory/sql                | 11.89 MiB     |
| memory/performance_schema | 223.62 MiB    |
| memory/mysys              | 8.91 MiB      |
| memory/mysqlx             | 3.10 KiB      |
| memory/mysqld_openssl     | 277.54 KiB    |
| memory/myisam             |  728 bytes    |
| memory/innodb             | 196.44 MiB    |
| memory/csv                |  120 bytes    |
| memory/blackhole          |  120 bytes    |
+---------------------------+---------------+
11 rows in set (0.00 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt; Index operation &lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;■ Index 생성 과 동시에 새로운 세션에서 DML발생 (알고리즘 : Inplace)&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661415630206&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;## session 1
mysql&amp;gt; create index idx_test on test_tbl(a) ALGORITHM=inplace LOCK=none;
Query OK, 0 rows affected (2.81 sec)
Records: 0  Duplicates: 0  Warnings: 0



## session 2
INSERT INTO kim.test_tbl (b, c) VALUES (null, 'test1');
SELECT * FROM kim.test_tbl ORDER BY a DESC LIMIT 1;
UPDATE kim.test_tbl SET b='test2' WHERE a=1;
SELECT * FROM kim.test_tbl WHERE a=1;
DELETE FROM kim.test_tbl WHERE a=2;
SELECT * FROM kim.test_tbl WHERE a=2;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;-&amp;gt; Index 생성이 완료되지 않아도 해당 쿼리들이 LOCK없이 정상적으로 진행됩니다.&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661415658110&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; SELECT * FROM kim.test_tbl ORDER BY a DESC LIMIT 1;
+---------+------+-------+
| a       | b    | c     |
+---------+------+-------+
| 1048565 | NULL | test1 |
+---------+------+-------+
1 row in set (0.00 sec)

mysql&amp;gt; SELECT * FROM kim.test_tbl WHERE a=1;
+---+-------+--------------------------------------+
| a | b     | c                                    |
+---+-------+--------------------------------------+
| 1 | test2 | 726b2d88-1dfe-11ed-a65d-f220cd459773 |
+---+-------+--------------------------------------+
1 row in set (0.00 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;Online DDL&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #ff0000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #ff0000;&quot;&gt;시 진행된&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #ff0000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #ff0000;&quot;&gt;DML&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #ff0000;&quot;&gt;은&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #ff0000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #ff0000;&quot;&gt;Row Log Buffer&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;에서 진행됩니다.&amp;nbsp;&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;최대 사이즈 변수의 값을 넘어 버리면 오류가 발생되어&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #ff0000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;DDL&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;이 실패하게 됩니다&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;.&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661415681044&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; show global variables like '%online%';
+----------------------------------+-----------+
| Variable_name                    | Value     |
+----------------------------------+-----------+
| innodb_online_alter_log_max_size | 134217728 |
+----------------------------------+-----------+&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;■&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;Index 삭제&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(알고리즘 : Inplace)&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661415693595&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; drop index idx_test on kim.test_tbl ALGORITHM=inplace LOCK=none;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;■&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;Index 이름 변경&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(알고리즘 : Inplace)&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661415717213&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; ALTER TABLE test_tbl RENAME INDEX test_tbl TO test_tbl_new, ALGORITHM=INPLACE, LOCK=NONE;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt; Column Opertaions &lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;■ column 삭제&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(알고리즘 : Inplace)&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661415799773&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; ALTER TABLE test_tbl DROP COLUMN c, ALGORITHM=INPLACE, LOCK=NONE;
Query OK, 0 rows affected (18.98 sec)
Records: 0  Duplicates: 0  Warnings: 0&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;■ column 이름 변경&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(알고리즘 : Inplace)&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661415818152&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; ALTER TABLE test_tbl change b c VARCHAR(100), ALGORITHM=INPLACE, LOCK=NONE;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;■ column Default value 추가 및 변경 (알고리즘 : Instant)&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661415835319&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; ALTER TABLE test_tbl MODIFY c VARCHAR(100) DEFAULT '', ALGORITHM=INSTANT;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;■ column Data Type 변경 (&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;알고리즘 : copy)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;u&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Data Type 변경은 무조건 Copy 알고리즘만 사용이 가능합니다. 또한 Shared Lock 이하만 지원되기 때문에 CUD는 불가합니다.&lt;/span&gt;&lt;/span&gt;&lt;/u&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1661415855541&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; UPDATE test_tbl SET c=0;

mysql&amp;gt; ALTER TABLE test_tbl MODIFY c INT DEFAULT 0, ALGORITHM=COPY, LOCK=SHARED;
Query OK, 1000004 rows affected (7.04 sec)
Records: 1000004  Duplicates: 0  Warnings: 0&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ column varchar Data Type 크기 확장&amp;nbsp;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;알고리즘 : Inplace)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;u&gt;&lt;span&gt;&lt;span&gt;Varchar Type 일 시에 크기를 확장만 가능하고 축소는&lt;/span&gt;&lt;/span&gt; &lt;span&gt;&lt;span&gt;불가&lt;/span&gt;합니다.&lt;/span&gt;&lt;/u&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1661415885192&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; ALTER TABLE test_tbl CHANGE c c VARCHAR(300), ALGORITHM=INPLACE, LOCK=NONE;
Query OK, 0 rows affected (0.01 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;■ column Default value 삭제 (알고리즘 : Instant)&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661415901006&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; ALTER TABLE test_tbl ALTER c DROP DEFAULT, ALGORITHM=INSTANT;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;참고&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://yhjin.tistory.com/80?category=1014637&quot;&gt;https://yhjin.tistory.com/80?category=1014637&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1661415569589&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;MySQL Online DDL(2) [작업 정보 계측 and Memory]&quot; data-og-description=&quot;Mysql의 innoDB는 Buffer 메모리를 사용하여 IO반영 전 작업을 처리하거나 Temporary 작업들을 저장하고 있다. 해당 Buffer를 사용하는 작업 중 사용하는 메모리를 조회하는 방법인 Mysql 5.7부터 추가된 Perfo&quot; data-og-host=&quot;yhjin.tistory.com&quot; data-og-source-url=&quot;https://yhjin.tistory.com/80?category=1014637&quot; data-og-url=&quot;https://yhjin.tistory.com/80&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bxzvjV/hyPzy7cbb3/wyqeMBsHZ2QzUYKKIwTpx0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/sl8iE/hyPzmr8dOW/kxraE09Vvf6Fo2b6auKmvK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/brWPRf/hyPzr1eBeV/kKccGPxfZeEQok6VD2Npd1/img.png?width=220&amp;amp;height=220&amp;amp;face=0_0_220_220&quot;&gt;&lt;a href=&quot;https://yhjin.tistory.com/80?category=1014637&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://yhjin.tistory.com/80?category=1014637&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bxzvjV/hyPzy7cbb3/wyqeMBsHZ2QzUYKKIwTpx0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/sl8iE/hyPzmr8dOW/kxraE09Vvf6Fo2b6auKmvK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/brWPRf/hyPzr1eBeV/kKccGPxfZeEQok6VD2Npd1/img.png?width=220&amp;amp;height=220&amp;amp;face=0_0_220_220');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;MySQL Online DDL(2) [작업 정보 계측 and Memory]&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Mysql의 innoDB는 Buffer 메모리를 사용하여 IO반영 전 작업을 처리하거나 Temporary 작업들을 저장하고 있다. 해당 Buffer를 사용하는 작업 중 사용하는 메모리를 조회하는 방법인 Mysql 5.7부터 추가된 Perfo&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;yhjin.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>DataBase/MySQL &amp;amp; MariaDB</category>
      <author>jeonghyun</author>
      <guid isPermaLink="true">https://jhdatabase.tistory.com/107</guid>
      <comments>https://jhdatabase.tistory.com/entry/MySQL-Online-DDL-part-2-%EC%8B%A4%EC%8A%B5#entry107comment</comments>
      <pubDate>Thu, 25 Aug 2022 17:25:39 +0900</pubDate>
    </item>
    <item>
      <title>[MySQL - Online DDL] part 1. 알고리즘</title>
      <link>https://jhdatabase.tistory.com/entry/MySQL-Online-DDL-part-1-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98</link>
      <description>&lt;div&gt;&lt;b&gt;&lt;span&gt;Online DDL이란&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;u&gt;테이블의 구조를 변경(스키마 변경)을 실행하는 도중에도, INSERT나 UPDATE와 같은 DML들을 실행할 수 있도록 해주는 기능&lt;/u&gt;입니다&lt;/span&gt;. MySQL 서버에서 Online DDL이 지원되지 않았던 시절에는 pt-online-schema-change와 같은 3-rd party 도구들을 이용해야 했지만, (이런 도구들은 불필요한 작업이 너무 많이 수반되어 서비스 영향도가 높은 편이어서) 이제는 대부분의 경우 MySQL 서버의 Online DDL을 이용합니다.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;&amp;nbsp;InnoDB에서 지원하는 online ddl 알고리즘&amp;nbsp;&lt;/b&gt;&lt;/blockquote&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #006dd7;&quot;&gt;- copy&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;- inplace&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;- instant (mysql 8.0)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ Copy&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;- 변경된 스키마가 적용된 임시 테이블을 생성하여 기존 테이블의 데이터를 복사한 후 테이블 이름을 변경하는 방식&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;- ALGORITHM 구문 미사용시 INPLACE -&amp;gt; COPY 순으로 처리&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&amp;nbsp;INPLACE 로 처리 가능한 경우 INPLACE 를 사용하고 처리 불가능시 COPY 사용&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;단점&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;- DDL 작업 일시중지, 작업중 I/O, CPU 사용제한 메커니즘 없음&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 작업중 롤백이 발생할 수 있으며, 롤백시 많은 비용이 소모&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;- ALTER TABLE 작업 동안 Concurrent DML (inserts,updates,deletes) 이 차단&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;nbsp; LOCK = SHARED 일 때 Select는 가능&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;- 복제 지연이 발생 가능성 있음&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ I&lt;/span&gt;&lt;span&gt;nplace&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;- 원본 테이블에 직접 변경작업을 적용&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;- 작업 준비(during perparation) 실행단계(executioin pahases of the operation)에서 테이블에 대한 배타적 메타 데이터 잠금(exclusive metadata lock)이 잠깐 동안 수행될 수 있습니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 일반적으로 Concurrent DML 을 지원&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;단점&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;- 지원하지 않는 DDL 구문이 있습니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&amp;nbsp; 지원여부 확인을 위해 ALGORITHM=INPLACE 구문을 사용해서 확인 가능&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;- 테이블을 수정하는 동안 변경된 데이터량이 innodb_online_alter_log_max_size 를 초과할 경우&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;nbsp; online ddl 이 실패하고 변경된 데이터는 롤백된다.&amp;nbsp; =&amp;gt; 보통 1GB로 설정하고 하면 된다고 한다. session level에서도 변경이 가능하기 때문에 1GB로 설정 후 진행&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;- 장기간 실행되는 DLL 작업은 슬레이브에서 복제 지연을 유발할 수 있습니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; ALTER TABLE 작업은 마스터에서 작업이 완료되면 슬레이브로 전달&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;- 동시성이 높은 서버의 큰 테이블에 대해 높은 I/O 사용량을 유발할 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span&gt;■ I&lt;/span&gt;&lt;span&gt;&lt;span&gt;nstant&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;- mysql 8.0 에서 추가되었습니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;- 메타 정보만 수정하여 변경 사항 반영&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; Data dictionary의 metadata만 변경하기 때문에 Table에 metadata lock을 걸지 않고 Table data에도 영향을 받지 않기 때문에 바로 반영합니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;- ALGORITHM 구문 미사용시 INSTANT -&amp;gt; INPLACE -&amp;gt; COPY 순으로 처리&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;단점&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;- 컬럼 추가시 테이블의 마지막 열로만 추가 가능, 컬럼 위치 지정 불가&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;- ROW_FORMAT=COMPRESSED 를 사용하는 테이블에는 컬럼 추가 불가&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;- FULLTEXT 인덱스를 포함하는 테이블에는 컬럼 추가 불가&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;- 임시 테이블에는 컬럼 추가 불가&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;임시테이블은 ALGORITHM=COPY 만 지원&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 데이터 딕셔너리 테이블 스페이스 (공유 테이블 스페이스)에 있는 테이블에는 컬럼 추가 불가&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #3665ee;&quot;&gt;Instant &amp;gt; InPlace &amp;gt; Copy 순으로 효율적&lt;/span&gt;&lt;/b&gt;이며 Mysql 8에서는 Instant가 default로 설정.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;해당 알고리즘 사용 부분이 매우 제한적이기 때문에 상황에 맞는 전략 필요.&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;※ 온라인 DDL(In-Place) 방식의 경우&amp;nbsp;innodb_online_alter_log_max_size&amp;nbsp;파라미터에 지정한 만큼 작업 중에 발생되는 Concurrent DML에 대한 임시 로그를 기록하게 되는데 파라미터에 지정된 용량 이상 되면 &lt;span style=&quot;letter-spacing: 0px;&quot;&gt;MySQL 서버는 에러를 발생시키고 지금까지 했던 테이블 스키마 변경 작업을 ROLLBACK하게 됩니다.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px; color: #444444;&quot;&gt;(innodb_online_alter_log_max_size 기본 값 : 128MB)&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;참고&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;a href=&quot;https://medium.com/daangn/mysql-online-ddl-faf47439084c&quot;&gt;https://medium.com/daangn/mysql-online-ddl-faf47439084c&lt;/a&gt;
&lt;figure id=&quot;og_1661414479883&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;MySQL Online-DDL&quot; data-og-description=&quot;당근 마켓의 서비스는 쉬지 않고 발전하고 있어요. 하지만 이런 소프트웨어의 개선 작업은 단순히 버튼 한번 클릭으로 완성되는 것은 아니에요. 때로는 마치 전쟁을 치루는 것 같은 과정을 거치&quot; data-og-host=&quot;medium.com&quot; data-og-source-url=&quot;https://medium.com/daangn/mysql-online-ddl-faf47439084c&quot; data-og-url=&quot;https://medium.com/daangn/mysql-online-ddl-faf47439084c&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bqxINg/hyPzye0oqn/zfZ7Kqr73EPg9g48X75Kvk/img.jpg?width=1200&amp;amp;height=444&amp;amp;face=0_0_1200_444,https://scrap.kakaocdn.net/dn/D874p/hyPzylNkQ9/gXEKocH56hlFD0zWokmo71/img.jpg?width=1400&amp;amp;height=518&amp;amp;face=0_0_1400_518&quot;&gt;&lt;a href=&quot;https://medium.com/daangn/mysql-online-ddl-faf47439084c&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://medium.com/daangn/mysql-online-ddl-faf47439084c&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bqxINg/hyPzye0oqn/zfZ7Kqr73EPg9g48X75Kvk/img.jpg?width=1200&amp;amp;height=444&amp;amp;face=0_0_1200_444,https://scrap.kakaocdn.net/dn/D874p/hyPzylNkQ9/gXEKocH56hlFD0zWokmo71/img.jpg?width=1400&amp;amp;height=518&amp;amp;face=0_0_1400_518');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;MySQL Online-DDL&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;당근 마켓의 서비스는 쉬지 않고 발전하고 있어요. 하지만 이런 소프트웨어의 개선 작업은 단순히 버튼 한번 클릭으로 완성되는 것은 아니에요. 때로는 마치 전쟁을 치루는 것 같은 과정을 거치&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;medium.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://iamwhat.tistory.com/entry/online-ddl-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98&quot;&gt;https://iamwhat.tistory.com/entry/online-ddl-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98&lt;/a&gt;
&lt;figure id=&quot;og_1661414482000&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;online ddl 알고리즘&quot; data-og-description=&quot;mysql 5.6 부터 online ddl이 추가 되었다. 각 버전별 online ddl 지원 범위가 다르다 메뉴얼을 한번 읽어보자. https://dev.mysql.com/doc/refman/5.6/en/innodb-online-ddl.html https://dev.mysql.com/doc/refm..&quot; data-og-host=&quot;iamwhat.tistory.com&quot; data-og-source-url=&quot;https://iamwhat.tistory.com/entry/online-ddl-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98&quot; data-og-url=&quot;https://iamwhat.tistory.com/30&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/uIJwY/hyPzoi8iZY/OfpGA5nuf5CaTyhSDCZS3K/img.png?width=640&amp;amp;height=462&amp;amp;face=0_0_640_462,https://scrap.kakaocdn.net/dn/co0Tcv/hyPzjCcJWX/6YybKXEqXUKRpw3wHTrQ41/img.png?width=640&amp;amp;height=462&amp;amp;face=0_0_640_462,https://scrap.kakaocdn.net/dn/cSZo4x/hyPzyzjhQH/gKrpoEc6TvHLuyVu316xOK/img.png?width=553&amp;amp;height=562&amp;amp;face=0_0_553_562&quot;&gt;&lt;a href=&quot;https://iamwhat.tistory.com/entry/online-ddl-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://iamwhat.tistory.com/entry/online-ddl-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/uIJwY/hyPzoi8iZY/OfpGA5nuf5CaTyhSDCZS3K/img.png?width=640&amp;amp;height=462&amp;amp;face=0_0_640_462,https://scrap.kakaocdn.net/dn/co0Tcv/hyPzjCcJWX/6YybKXEqXUKRpw3wHTrQ41/img.png?width=640&amp;amp;height=462&amp;amp;face=0_0_640_462,https://scrap.kakaocdn.net/dn/cSZo4x/hyPzyzjhQH/gKrpoEc6TvHLuyVu316xOK/img.png?width=553&amp;amp;height=562&amp;amp;face=0_0_553_562');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;online ddl 알고리즘&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;mysql 5.6 부터 online ddl이 추가 되었다. 각 버전별 online ddl 지원 범위가 다르다 메뉴얼을 한번 읽어보자. https://dev.mysql.com/doc/refman/5.6/en/innodb-online-ddl.html https://dev.mysql.com/doc/refm..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;iamwhat.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;/div&gt;</description>
      <category>DataBase/MySQL &amp;amp; MariaDB</category>
      <category>mysql</category>
      <category>Online DDL</category>
      <category>알고리즘</category>
      <author>jeonghyun</author>
      <guid isPermaLink="true">https://jhdatabase.tistory.com/106</guid>
      <comments>https://jhdatabase.tistory.com/entry/MySQL-Online-DDL-part-1-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98#entry106comment</comments>
      <pubDate>Thu, 25 Aug 2022 17:14:12 +0900</pubDate>
    </item>
    <item>
      <title>[NCP - CloudDB for MySQL 데이터 마이그레이션] use. mysqldump</title>
      <link>https://jhdatabase.tistory.com/entry/NCP-CloudDB-for-MySQL-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%A7%88%EC%9D%B4%EA%B7%B8%EB%A0%88%EC%9D%B4%EC%85%98-use-mysqldump</link>
      <description>&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요 이번글에서는 Naver Cloud의 CloudDB for MySQL서비스에서의 데이터 마이그레이션 작업을 진행해보겠습니다. 실제 사이트에서 작업중 일어난 에러들도 함께 정리해보았습니다. &lt;br /&gt;해결방법은 제 개인적인 생각으로 진행했으므로 최선의 방법이 아닐 수 있습니다&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;테스트 환경&lt;/b&gt;&lt;/blockquote&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;기존 DB : CloudDB for MySQL -&amp;gt; AS-IS&lt;br /&gt;대상 DB : CloudDB for MySQL -&amp;gt; TO-BE&lt;br /&gt;마이그레이션을 위한 임시 서버 생성 -&amp;gt; VM 인스턴스 (mig)&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt; Export &lt;/b&gt;&lt;/blockquote&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;background-color: #fcfcfc;&quot;&gt;※ 에러 1번&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;color: #666666;&quot;&gt;TABLE1 테이블이 오랜 미관리로 인해 손상되어 있어 dump불가하며 조회시 없다고 나옵니다. &lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;[root@mig ~]# mysqldump -h &amp;lt;AS-IS도메인&amp;gt; -u &amp;lt;DB 유저&amp;gt; -p &amp;lt;DB 유저 패스워드&amp;gt; --routines --triggers --single-transaction &amp;lt;database이름&amp;gt; &amp;gt; dump.sql&lt;/b&gt; &lt;br /&gt;Enter password: &lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;Error: Couldn't read status information for table TABLE1 ()&lt;/span&gt;&lt;/b&gt; &lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;mysqldump: Couldn't execute 'show create table `TABLE1`': Table 'kim.table1' doesn't exist (1146)&lt;/span&gt;&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;MySQL [(none)]&amp;gt; select * from information_schema.tables where table_name='TABLE1'; &lt;br /&gt;Empty set (0.00 sec)&lt;/blockquote&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;해결방법 &lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;color: #666666;&quot;&gt;해당 테이블 제외하고 export 진행하였습니다. 정확한 원인 파악을 위해서는 네이버클라우드에서 관리를 하기때문에 네이버클라우드에 문의가 필요해보입니다.&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;[root@mig ~]# mysqldump -h &amp;lt;AS-IS도메인&amp;gt; -u &amp;lt;DB 유저&amp;gt; -p &amp;lt;DB 유저 패스워드&amp;gt; --routines --triggers --single-transaction &amp;lt;database이름&amp;gt; &lt;span style=&quot;color: #8a3db6;&quot;&gt;--ignore-table=&amp;lt;database이름&amp;gt;.table1&lt;/span&gt; &amp;gt; dump.sql&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;mysqldump: [Warning] Using a password on the command line interface can be insecure.&lt;/blockquote&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;background-color: #fcfcfc;&quot;&gt;※ 에러 2번&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #fcfcfc;&quot;&gt;네트워크 read, write 타임아웃 시간이 짧게 설정되어 export 도중에 에러와 함께 끊기는 상황 발생&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;[root@mig ~]# mysqldump -h &amp;lt;AS-IS도메인&amp;gt; -u &amp;lt;DB 유저&amp;gt; -p &amp;lt;DB 유저 패스워드&amp;gt; --routines --triggers --single-transaction &amp;lt;database이름&amp;gt; --ignore-table=&amp;lt;database이름&amp;gt;.table1 &amp;gt; dump.sql&lt;br /&gt;&lt;/b&gt; &lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;mysqldump: [Warning] Using a password on the command line interface can be insecure.&lt;/span&gt;&lt;/b&gt; &lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;mysqldump: Error 2013: Lost connection to MySQL server during query when dumping table `gb0120` at row: 167770&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;span style=&quot;background-color: #fcfcfc;&quot;&gt;해결방법&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: #666666;&quot;&gt;아래 두개의 파라미터 해당 값을 임시로 늘려줍니다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;MySQL [(none)]&amp;gt; show variables like 'net_read_timeout%'; &lt;br /&gt;+------------------------+--------+ &lt;br /&gt;| Variable_name | Value | &lt;br /&gt;+------------------------+-------+ &lt;br /&gt;| net_read_timeout | 30 | &lt;br /&gt;+------------------------+-------+ &lt;br /&gt;1 row in set (0.01 sec) &lt;br /&gt;&lt;br /&gt;MySQL [(none)]&amp;gt; show variables like 'net_write_timeout%'; &lt;br /&gt;+------------------------+---------+ &lt;br /&gt;| Variable_name | Value | &lt;br /&gt;+------------------------+---------+ &lt;br /&gt;| net_write_timeout | 60 | &lt;br /&gt;+------------------------+---------+ &lt;br /&gt;1 row in set (0.00 sec) &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;※ CDB는 콘솔에서 config 추가해주면 됩니다.&lt;/b&gt; &lt;br /&gt;&lt;b&gt;MySQL [(none)]&amp;gt; set global net_read_timeout = 10800;&lt;/b&gt; &lt;br /&gt;&lt;b&gt;MySQL [(none)]&amp;gt; set global net_write_timeout = 10800;&lt;/b&gt;&lt;/blockquote&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;Import &lt;/b&gt;&lt;/blockquote&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;background-color: #fcfcfc;&quot;&gt;※ 에러 1번&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;background-color: #fcfcfc;&quot;&gt;아래 에러는 GTID(global transaction identifier)와 관련되어 있습니다. &lt;br /&gt;네이버 클라우드(Ncloud) Cloud DB for MySQL 상품은 GTID(Global Transaction IDentifier)를 사용하는데, 보통의 mysql db 복구(Restore)는 GTID를 사용하지 않는 방법이기 때문에 백업(Backup) 단계에서 [&amp;ndash;set-gtid-purged=OFF] 옵션을 추가해야 하는데 이 옵션을 사용하지 않았기 때문입니다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;[root@mig ~]# mysql -h &amp;lt;TO-BE도메인&amp;gt; -u &amp;lt;DB 유저&amp;gt; -p &amp;lt;DB 유저 패스워드&amp;gt; &amp;lt; dump.sql&lt;/b&gt; &lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;Enter password:ERROR 1227 (42000) at line 18: Access denied; you need (at least one of) the SUPER privilege(s) for this operation&lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;span style=&quot;background-color: #fcfcfc;&quot;&gt;해결방법 1&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;background-color: #fcfcfc;&quot;&gt;export시 &lt;b&gt;&lt;span style=&quot;background-color: #fcfcfc;&quot;&gt;&amp;ndash;set-gtid-purged=OFF 옵션을 함께 사용하는 것을 import시 에러를 예방 할 수 있습니다.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;[root@mig ~]# mysqldump -h &amp;lt;AS-IS도메인&amp;gt; -u &amp;lt;DB 유저&amp;gt; -p &amp;lt;DB 유저 패스워드&amp;gt; --routines --triggers --single-transaction &amp;lt;database이름&amp;gt; --ignore-table=&amp;lt;database이름&amp;gt;.table1 &amp;ndash;set-gtid-purged=OFF &amp;gt; dump.sql&lt;/b&gt;&lt;/blockquote&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;해결방법2&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;이미 export를 하였거나 위 해결방법1과 같이 다시 export하기 힘든 상황에서는, vi에디터를 이용하여 dump파일에 있는 GTID 관련 내용을 삭제하고 복구하시면 문제가 해결됩니다. &lt;br /&gt;백업 파일 상단과 하단에 각각 아래와 같은 코드가 포함되어 있는데 이 내용을 삭제하거나 주석처리한 후에 복구를 시도하면 문제없이 복구가 가능합니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;##백업 파일 상단&lt;/b&gt; &lt;br /&gt;SET @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN; &lt;br /&gt;SET @@SESSION.SQL_LOG_BIN= 0; &lt;br /&gt;&lt;br /&gt;&lt;b&gt;##백업 파일 하단&lt;/b&gt; &lt;br /&gt;SET @@GLOBAL.GTID_PURGED='2*********b:***, 2*********';&lt;/blockquote&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;background-color: #fcfcfc;&quot;&gt;※ 에러 2번&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;MySQL은 보안 강화를 위해 Trigger, Stored Routines (Procedures and Functions), View, Event를 처음 생성한 계정을 [&lt;/span&gt;&lt;b&gt;DEFINER&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;]로 명시해 둠으로써 다른 계정으로 접근하지 못하도록 하는 것이 기본 설정이 되어 있어 에러 발생&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt; [root@mig ~]# mysql -h &amp;lt;TO-BE도메인&amp;gt; -u &amp;lt;DB 유저&amp;gt; -p &amp;lt;DB 유저 패스워드&amp;gt; &amp;lt; dump.sql&lt;/b&gt; &lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;ERROR 1227 (42000) at line 59599: Access denied; you need (at least one of) the SUPER privilege(s) for this operation&lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;span style=&quot;background-color: #fcfcfc;&quot;&gt;해결방법 1&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;DB 복구를 시도할 때는 [&lt;/span&gt;&lt;b&gt;DEFINER&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;] 관련 내용을 삭제하거나 동일한 계정 또는 SUPER privilege를 가진 계정으로 복구해야 합니다. CDB는 설치형DB와 달리 권한에 ALL이 없습니다. CDB에서는 DDL권한을 주어도 작업시 실패합니다. 따라서&lt;span style=&quot;background-color: #ffffff;&quot;&gt; [&lt;/span&gt;&lt;b&gt;DEFINER&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;] 관련 내용을 공백처리하여 진행하였습니다. 공백처리시 기본 유저로 들어간다고 합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;※ 해당 명령어 실행시 덤프파일 사이즈와 비슷한 임시 파일이 생성되었다가, 완료시 삭제됩니다. 필히 작업하는 공간의 여유공간을 확인 후 진행하시기 바랍니다.&lt;br /&gt;&lt;br /&gt;[root@mig ~]# sed -i 's/DEFINER=[^*]*\*/\*/g' dump.sql&lt;/b&gt;&lt;/blockquote&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;span style=&quot;background-color: #fcfcfc;&quot;&gt;해결방법 2&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fcfcfc;&quot;&gt;dump파일에 기재된 &lt;span style=&quot;background-color: #ffffff;&quot;&gt;[&lt;/span&gt;DEFINER&lt;span style=&quot;background-color: #ffffff;&quot;&gt;] 관련 동일 계정으로 import를 합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;&lt;b&gt;[root@mig ~]# mysql -h &amp;lt;TO-BE도메인&amp;gt; -u &amp;lt;DEFINER 유저&amp;gt; -p &amp;lt;DEFINER 유저 패스워드&amp;gt;&amp;nbsp; &amp;lt; dump.sql&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/b&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;※ &lt;b&gt;&lt;b&gt;DEFINER 유저&lt;/b&gt;&lt;/b&gt; 찾는방법&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;덤프파일 vi로 까보면 아래와 같이 definer가 명시되어 있음!!&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;...생략&lt;/div&gt;
&lt;div&gt;/*!50003 SET character_set_results = *** ;&lt;/div&gt;
&lt;div&gt;/*!50003 SET collation_connection&amp;nbsp;&amp;nbsp;= *** ;&lt;/div&gt;
&lt;div&gt;/*!50003 SET @saved_sql_mode&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= *** ;&lt;/div&gt;
&lt;div&gt;/*!50003 SET sql_mode&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= ***;&lt;/div&gt;
&lt;div&gt;DELIMITER ;;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;CREATE DEFINER=`&amp;lt;유저명&amp;gt;`@`%` *****&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
...생략&lt;/blockquote&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;위와 같은 방법으로 import까지 마치면 데이터 마이그레이션을 정상적으로 마칠 수 있습니다!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;참고&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://docs.3rdeyesys.com/database/ncloud_database_cdb_mysql_restore_error_1227_troubleshooting.html#%ED%95%B4%EA%B2%B0-%EB%B0%A9%EB%B2%95-2&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span&gt;https://docs.3rdeyesys.com/database/ncloud_database_cdb_mysql_restore_error_1227_troubleshooting.html#%ED%95%B4%EA%B2%B0-%EB%B0%A9%EB%B2%95-2&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;MySQL 복구 시 ERROR 1227 (42000) 문제 원인과 해결방법&quot; data-ke-align=&quot;alignCenter&quot; data-og-description=&quot;Ncloud에서 Cloud DB for MySQL 복구 시 ERROR 1227 (42000) 문제 원인과 해결방법입니다&quot; data-og-host=&quot;docs.3rdeyesys.com&quot; data-og-source-url=&quot;https://docs.3rdeyesys.com/database/ncloud_database_cdb_mysql_restore_error_1227_troubleshooting.html#%ED%95%B4%EA%B2%B0-%EB%B0%A9%EB%B2%95-2&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b7aWj4/hyPpzqXM2i/pp71rUaxFVFZMzi5P07NZ0/img.png?width=770&amp;amp;height=247&amp;amp;face=0_0_770_247,https://scrap.kakaocdn.net/dn/uGsk3/hyPpAcjVzd/fh193Sy8i3OW1K4B4vRCR1/img.png?width=230&amp;amp;height=680&amp;amp;face=0_0_230_680&quot; data-og-url=&quot;https://docs.3rdeyesys.com/database/ncloud_database_cdb_mysql_restore_error_1227_troubleshooting.html&quot;&gt;&lt;a href=&quot;https://docs.3rdeyesys.com/database/ncloud_database_cdb_mysql_restore_error_1227_troubleshooting.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.3rdeyesys.com/database/ncloud_database_cdb_mysql_restore_error_1227_troubleshooting.html#%ED%95%B4%EA%B2%B0-%EB%B0%A9%EB%B2%95-2&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b7aWj4/hyPpzqXM2i/pp71rUaxFVFZMzi5P07NZ0/img.png?width=770&amp;amp;height=247&amp;amp;face=0_0_770_247,https://scrap.kakaocdn.net/dn/uGsk3/hyPpAcjVzd/fh193Sy8i3OW1K4B4vRCR1/img.png?width=230&amp;amp;height=680&amp;amp;face=0_0_230_680');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;MySQL 복구 시 ERROR 1227 (42000) 문제 원인과 해결방법&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Ncloud에서 Cloud DB for MySQL 복구 시 ERROR 1227 (42000) 문제 원인과 해결방법입니다&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.3rdeyesys.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Cloud/NCP(Naver Cloud Platform)</category>
      <category>CloudDB for MySQL</category>
      <category>ncp</category>
      <category>데이터 마이그레이션</category>
      <author>jeonghyun</author>
      <guid isPermaLink="true">https://jhdatabase.tistory.com/105</guid>
      <comments>https://jhdatabase.tistory.com/entry/NCP-CloudDB-for-MySQL-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%A7%88%EC%9D%B4%EA%B7%B8%EB%A0%88%EC%9D%B4%EC%85%98-use-mysqldump#entry105comment</comments>
      <pubDate>Fri, 12 Aug 2022 00:14:21 +0900</pubDate>
    </item>
    <item>
      <title>[MySQL - 테이블 단편화 optimize/analyze table 정리]</title>
      <link>https://jhdatabase.tistory.com/entry/MySQL-%EB%8B%A8%ED%8E%B8%ED%99%94-optimizeanalyze-table-%EC%A0%95%EB%A6%AC</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;background-color: #fffaa5; color: #000000;&quot;&gt;※&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;background-color: #fffaa5; color: #000000;&quot;&gt;analyze table&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;1. optimizer가 사용하는 통계정보의 갱신처리입니다.&lt;br /&gt;2. InnoDB에서는 자발(자동)적으로 통계 정보를 갱신하기 때문에 크게 필요없다고 합니다.&lt;br /&gt;&amp;nbsp;&amp;nbsp; MyISAM의 경우는 카디날리티가 정확하게 갱신되어 있지만&lt;br /&gt;&amp;nbsp;&amp;nbsp; InnoDB는 아주 부정확하고 analyze table을 실행하면 빈번이 값이 바뀐다.&lt;br /&gt;&amp;nbsp;&amp;nbsp; InnoDB의 경우 자동으로 갱신되는 조건은 아래와 같다.&lt;br /&gt;&amp;nbsp;&amp;nbsp; - 전에 인덱스 통계정보를 갱신한후 테이블의 전체행수의1/16이 갱신된경우&lt;br /&gt;&amp;nbsp;&amp;nbsp; - 전에 인덱스 통계정보를 갱신한후 20억행이상이 갱신된경우&lt;br /&gt;3. analyze table은 랜덤으로 페이지를 8회추출해서 그 페이지내에 포함된 행 데이타를 조사해서&lt;br /&gt;&amp;nbsp;&amp;nbsp; 인덱스의 통계정보를 근사치로 갱신한다. 근사치이지만 옵티마이저가 사용하기 위한 통계정보로는&lt;br /&gt;&amp;nbsp;&amp;nbsp; 충분하다고 한다. 만약&amp;nbsp;페이지가 InnoDB 버퍼 풀에 있지 않다면 디스크 Read가 발생하게 되므로 8회되로 제한했는지 모르겠다.&lt;br /&gt;4. MySQL 5.1의 InnoDB에서는 8회로 고정되어있다.&lt;br /&gt;&amp;nbsp;&amp;nbsp; plugin을 사용하면 innodb_stats_sample_pages 옵션을 조정하여 변경할 수 있다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;background-color: #fffaa5; color: #000000;&quot;&gt;※ optimize table&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;1. InnoDB의 경우 fragmentation이 발생할 빈도가 높지는 않다. 물론 추기형이 아니므로 vacuum은 필요없다.&lt;br /&gt;2. InnoDB는 MVCC구조이므로 DELETE의 경우 불필요한 로그, 데이타가 남게 되므로 이런 경우 정리가 필요하게 된다.&lt;br /&gt;3. optimize table은 프라이머리키 순서로 데이타를 재배치한다. 이로 인해 인덱스의 정리도 가능해진다.&lt;br /&gt;4. optimize table은 ALTER TABLE t1 ENGINE INNODB;과 동일하다.&lt;br /&gt;5. MySQL은 ALTER TABLE작업은&lt;br /&gt;&amp;nbsp;&amp;nbsp; 임시 테이블 생성 &amp;gt; 임시 테이블로 복제 &amp;gt; 기존 테이블 DROP &amp;gt; 임시 테이블의 이름을 기존 테이블의 이름으로 변환&lt;br /&gt;&amp;nbsp;&amp;nbsp; 하는 식으로 수행한다. 인덱스가 추가, 갱신등으로 많은 시간을 허비하므로 인덱스를 삭제후 alter table 그후 인덱스 재생성&lt;br /&gt;&amp;nbsp;&amp;nbsp; 식으로 빠르게 수행하도록 한다.&lt;br /&gt;6. 4의 내용을 기반으로 5의 방식을 도입하면 optimize table을 보다 고속으로 수행할수 있다.&lt;br /&gt;&amp;nbsp;&amp;nbsp; PK이외의 인덱스를 삭제 &amp;gt; optimize table &amp;gt; 인덱스 재생성&lt;/blockquote&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;span style=&quot;background-color: #99cefa;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;☞Optimize table테스트&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;물리적인&amp;nbsp;디스크&amp;nbsp;조각모음&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테이블의&amp;nbsp;단편화&amp;nbsp;현상을&amp;nbsp;해결,&amp;nbsp;차지하는&amp;nbsp;용량을&amp;nbsp;줄임&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;■ 10만건 데이터 insert&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1659178990154&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; CREATE TABLE Nonprimenumber(num INT PRIMARY KEY);
Query OK, 0 rows affected (0.01 sec)
mysql&amp;gt; DELIMITER $$
mysql&amp;gt; CREATE PROCEDURE myFunction()
    -&amp;gt; BEGIN
    -&amp;gt;     DECLARE i INT DEFAULT 1;
    -&amp;gt;     WHILE (i &amp;lt;= 100000) DO
    -&amp;gt;         INSERT INTO `Nonprimenumber` VALUE (i);
    -&amp;gt;         SET i = i + 1;
    -&amp;gt;     END WHILE;
    -&amp;gt; END$$
Query OK, 0 rows affected (0.00 sec)
mysql&amp;gt; DELIMITER ;
mysql&amp;gt; call myFunction();


mysql&amp;gt; select count(*) from Nonprimenumber;
+----------+
| count(*) |
+----------+
|  1000000 |
+----------+
1 row in set (0.01 sec)


※ 10만건 데이터 당시 데이터 사이즈
mysql&amp;gt; select table_name, round(sum(data_length+index_length)/1024/1024,1) &quot;Size(MB)&quot; from information_schema.tables  where table_name='Nonprimenumber' group by 1;
+----------------+----------+
| TABLE_NAME     | Size(MB) |
+----------------+----------+
| Nonprimenumber |      2.5 |
+----------------+----------+
1 row in set (0.00 sec)



[root@jh-master jh]# ll
total 10244
-rw-r----- 1 mysql mysql 10485760 Jul 27 10:13 Nonprimenumber.ibd&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ 4만건 delete&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1659179038249&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; delete from Nonprimenumber where num between 30000 and 70000;
Query OK, 40001 rows affected (0.17 sec)
mysql&amp;gt; select count(*) from Nonprimenumber;
+----------+
| count(*) |
+----------+
|    59999 |
+----------+
1 row in set (0.01 sec)


※ 6만건 데이터 당시 데이터 사이즈
mysql&amp;gt; select table_name, round(sum(data_length+index_length)/1024/1024,1) &quot;Size(MB)&quot; from information_schema.tables  where table_name='Nonprimenumber' group by 1;
+----------------+----------+
| TABLE_NAME     | Size(MB) |
+----------------+----------+
| Nonprimenumber |      2.5 |
+----------------+----------+
1 row in set (0.00 sec)


## 삭제 이전과 사이즈 동일
[root@jh-master jh]# ll
total 10244
-rw-r----- 1 mysql mysql 10485760 Jul 27 10:13 Nonprimenumber.ibd&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;■ Optimize table 진행&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;database내 모든 테이블에 대해 실행&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1659179093308&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@jh-master ~]# mysqlcheck -u root -p --optimize --databases jh
Enter password:
jh.Nonprimenumber
note     : Table does not support optimize, doing recreate + analyze instead
status   : OK


## 사이즈 줄어듦
[root@jh-master jh]# ll
total 8196
-rw-r----- 1 mysql mysql 8388608 Jul 27 11:10 Nonprimenumber.ibd&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;※ 테이블별 따로 수행 방법&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1659179110398&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; optimize table jh.Nonprimenumber;
+-------------------+----------+----------+-------------------------------------------------------------------+
| Table             | Op       | Msg_type | Msg_text                                                          |
+-------------------+----------+----------+-------------------------------------------------------------------+
| jh.Nonprimenumber | optimize | note     | Table does not support optimize, doing recreate + analyze instead |
| jh.Nonprimenumber | optimize | status   | OK                                                                |
+-------------------+----------+----------+-------------------------------------------------------------------+
2 rows in set (0.30 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;span style=&quot;background-color: #99cefa;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;☞&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ANALYZE&amp;nbsp;TABLE 테스트&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;인덱스를&amp;nbsp;재생성하여&amp;nbsp;성능을&amp;nbsp;최적화,&amp;nbsp;키를&amp;nbsp;재분배&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;InnoDB에서는 어느정도 이상의 변경이 발생하면 자발적으로 통계 정보를 갱신하기 때문에 수동으로 해줄 필요없음.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;데이터베이스 analyze 수행 방법&lt;/div&gt;
&lt;pre id=&quot;code_1659179138637&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@jh-master ~]# mysqlcheck -u root -p --analyze --databases jh
Enter password:
jh.Nonprimenumber                                  OK&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&amp;amp;blogId=parkjy76&amp;amp;logNo=30136379533&quot;&gt;https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&amp;amp;blogId=parkjy76&amp;amp;logNo=30136379533&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1659179184084&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;MySQL optimize/analyze table 정리&quot; data-og-description=&quot;analyze table 1. optimizer가 사용하는 통계정보의 갱신처리이다. 2. InnoDB에서는 자발(자동)적으로 ...&quot; data-og-host=&quot;blog.naver.com&quot; data-og-source-url=&quot;https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&amp;amp;blogId=parkjy76&amp;amp;logNo=30136379533&quot; data-og-url=&quot;https://blog.naver.com/parkjy76/30136379533&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/wqXBj/hyPgbxoUBz/Gj6muvPPg20uIIik7PGrCK/img.png?width=270&amp;amp;height=270&amp;amp;face=0_0_270_270&quot;&gt;&lt;a href=&quot;https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&amp;amp;blogId=parkjy76&amp;amp;logNo=30136379533&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&amp;amp;blogId=parkjy76&amp;amp;logNo=30136379533&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/wqXBj/hyPgbxoUBz/Gj6muvPPg20uIIik7PGrCK/img.png?width=270&amp;amp;height=270&amp;amp;face=0_0_270_270');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;MySQL optimize/analyze table 정리&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;analyze table 1. optimizer가 사용하는 통계정보의 갱신처리이다. 2. InnoDB에서는 자발(자동)적으로 ...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;blog.naver.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>DataBase/MySQL &amp;amp; MariaDB</category>
      <category>analyze table</category>
      <category>mysql</category>
      <category>optimize table</category>
      <category>테이블 단편화</category>
      <author>jeonghyun</author>
      <guid isPermaLink="true">https://jhdatabase.tistory.com/104</guid>
      <comments>https://jhdatabase.tistory.com/entry/MySQL-%EB%8B%A8%ED%8E%B8%ED%99%94-optimizeanalyze-table-%EC%A0%95%EB%A6%AC#entry104comment</comments>
      <pubDate>Sat, 30 Jul 2022 20:07:31 +0900</pubDate>
    </item>
    <item>
      <title>[MySQL - 4node MHA &amp;amp; select 부하분산] use. NCP Loadbalancer</title>
      <link>https://jhdatabase.tistory.com/entry/MySQL-4node-MHA-select-%EB%B6%80%ED%95%98%EB%B6%84%EC%82%B0-use-NCP-Loadbalancer</link>
      <description>&lt;div&gt;&lt;b&gt;현재의 Master+Slave1,2,3 MHA 구성에서 Slave 2,3을 MHA에서 제외시킨 뒤 LoadBalancer를 통해 Slave 2,3을 select 용 부하분산을 할 예정입니다.&lt;/b&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;여기서 가장 중요한 점은 was단에서 read와 write를 각 IP별로 나눠줄 수 있어야합니다. 먼저 확인 후 진행하시길 바랍니다.&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;최종적으로 MHA manager + Master + Slave1 이 write작업 및 고가용성을 지원하며, Slave2 + Slave3은 read 부하분산용으로 사용 예정입니다. 따라서 write용 IP는 MHA의 VIP가 서비스 IP가 되며, read용 IP는 Loadbalancer의 도메인이 됩니다.&lt;/b&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ Slave2,3 MHA에서 제외 (mgr)&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1659178540254&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@jh-mgr ~]# vi /etc/mha.cnf


#ping interval, 3 times trial
ping_interval=5


#custom scripts for master ip failover
master_ip_failover_script=/var/log/masterha/app1/custom_scripts/master_ip_failover


#custom scripts for shutdown using fencing network custom script
#shutdown_script=/var/log/masterha/app1/custom_scripts/power_manager


#custom scripts for manual master switch
master_ip_online_change_script=/var/log/masterha/app1/custom_scripts/master_ip_online_change


[server1]
hostname=192.168.100.36
port=3306
ignore_fail=1


[server2]
hostname=192.168.100.37
port=3306
ignore_fail=1


------Slave 3, 4번 목록 삭제---------
[server3]
hostname=192.168.100.38
port=3306
ignore_fail=1


[server4]
hostname=192.168.100.39
port=3306
ignore_fail=1




[root@jh-mgr ~]# sshcheck
Wed Jul 27 09:26:16 2022 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
Wed Jul 27 09:26:16 2022 - [info] Reading application default configuration from /etc/mha.cnf..
Wed Jul 27 09:26:16 2022 - [info] Reading server configuration from /etc/mha.cnf..
Wed Jul 27 09:26:16 2022 - [info] Starting SSH connection tests..
Wed Jul 27 09:26:17 2022 - [debug]
Wed Jul 27 09:26:16 2022 - [debug]  Connecting via SSH from root@192.168.100.36(192.168.100.36:22) to root@192.168.100.37(192.168.100.37:22)..
Wed Jul 27 09:26:16 2022 - [debug]   ok.
Wed Jul 27 09:26:17 2022 - [debug]
Wed Jul 27 09:26:17 2022 - [debug]  Connecting via SSH from root@192.168.100.37(192.168.100.37:22) to root@192.168.100.36(192.168.100.36:22)..
Wed Jul 27 09:26:17 2022 - [debug]   ok.
Wed Jul 27 09:26:17 2022 - [info] All SSH connection tests passed successfully.
Use of uninitialized value in exit at /usr/local/bin/masterha_check_ssh line 44.



[root@jh-mgr ~]# replcheck
Wed Jul 27 09:26:37 2022 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
Wed Jul 27 09:26:37 2022 - [info] Reading application default configuration from /etc/mha.cnf..
Wed Jul 27 09:26:37 2022 - [info] Reading server configuration from /etc/mha.cnf..
Wed Jul 27 09:26:37 2022 - [info] MHA::MasterMonitor version 0.57.
Wed Jul 27 09:26:38 2022 - [info] GTID failover mode = 0
Wed Jul 27 09:26:38 2022 - [info] Dead Servers:
Wed Jul 27 09:26:38 2022 - [info] Alive Servers:
Wed Jul 27 09:26:38 2022 - [info]   192.168.100.36(192.168.100.36:3306)
Wed Jul 27 09:26:38 2022 - [info]   192.168.100.37(192.168.100.37:3306)
Wed Jul 27 09:26:38 2022 - [info] Alive Slaves:
Wed Jul 27 09:26:38 2022 - [info]   192.168.100.37(192.168.100.37:3306)  Version=8.0.28 (oldest major version between slaves) log-bin:enabled
Wed Jul 27 09:26:38 2022 - [info]     Replicating from 192.168.100.36(192.168.100.36:3306)
Wed Jul 27 09:26:38 2022 - [info] Current Alive Master: 192.168.100.36(192.168.100.36:3306)
Wed Jul 27 09:26:38 2022 - [info] Checking slave configurations..
Wed Jul 27 09:26:38 2022 - [info]  read_only=1 is not set on slave 192.168.100.37(192.168.100.37:3306).
Wed Jul 27 09:26:38 2022 - [info] Checking replication filtering settings..
Wed Jul 27 09:26:38 2022 - [info]  binlog_do_db= , binlog_ignore_db=
Wed Jul 27 09:26:38 2022 - [info]  Replication filtering check ok.
Wed Jul 27 09:26:38 2022 - [info] GTID (with auto-pos) is not supported
Wed Jul 27 09:26:38 2022 - [info] Starting SSH connection tests..
Wed Jul 27 09:26:39 2022 - [info] All SSH connection tests passed successfully.
Wed Jul 27 09:26:39 2022 - [info] Checking MHA Node version..
Wed Jul 27 09:26:39 2022 - [info]  Version check ok.
Wed Jul 27 09:26:39 2022 - [info] Checking SSH publickey authentication settings on the current master..
Wed Jul 27 09:26:39 2022 - [info] HealthCheck: SSH to 192.168.100.36 is reachable.
Wed Jul 27 09:26:39 2022 - [info] Master MHA Node version is 0.57.
Wed Jul 27 09:26:39 2022 - [info] Checking recovery script configurations on 192.168.100.36(192.168.100.36:3306)..
Wed Jul 27 09:26:39 2022 - [info]   Executing command: save_binary_logs --command=test --start_pos=4 --binlog_dir=/data --output_file=/var/log/masterha/app5/save_binary_logs_test --manager_version=0.57 --start_file=mariadb-bin.000015
Wed Jul 27 09:26:39 2022 - [info]   Connecting to root@192.168.100.36(192.168.100.36:22)..
  Creating /var/log/masterha/app5 if not exists..    ok.
  Checking output directory is accessible or not..
   ok.
  Binlog found at /data, up to mariadb-bin.000015
Wed Jul 27 09:26:39 2022 - [info] Binlog setting check done.
Wed Jul 27 09:26:39 2022 - [info] Checking SSH publickey authentication and checking recovery script configurations on all alive slave servers..
Wed Jul 27 09:26:39 2022 - [info]   Executing command : apply_diff_relay_logs --command=test --slave_user='repl' --slave_host=192.168.100.37 --slave_ip=192.168.100.37 --slave_port=3306 --workdir=/var/log/masterha/app5 --target_version=8.0.28 --manager_version=0.57 --relay_dir=/data --current_relay_log=relay-log.000002  --slave_pass=xxx
Wed Jul 27 09:26:39 2022 - [info]   Connecting to root@192.168.100.37(192.168.100.37:22)..
  Checking slave recovery environment settings..
    Relay log found at /data, up to relay-log.000002
    Temporary relay log file is /data/relay-log.000002
    Testing mysql connection and privileges..mysql: [Warning] Using a password on the command line interface can be insecure.
done.
    Testing mysqlbinlog output.. done.
    Cleaning up test file(s).. done.
Wed Jul 27 09:26:40 2022 - [info] Slaves settings check done.
Wed Jul 27 09:26:40 2022 - [info]
192.168.100.36(192.168.100.36:3306) (current master)
+--192.168.100.37(192.168.100.37:3306)

Wed Jul 27 09:26:40 2022 - [info] Checking replication health on 192.168.100.37..
Wed Jul 27 09:26:40 2022 - [info]  ok.
Wed Jul 27 09:26:40 2022 - [info] Checking master_ip_failover_script status:
Wed Jul 27 09:26:40 2022 - [info]   /var/log/masterha/app1/custom_scripts/master_ip_failover --command=status --ssh_user=root --orig_master_host=192.168.100.36 --orig_master_ip=192.168.100.36 --orig_master_port=3306
Wed Jul 27 09:26:40 2022 - [info]  OK.
Wed Jul 27 09:26:40 2022 - [warning] shutdown_script is not defined.
Wed Jul 27 09:26:40 2022 - [info] Got exit code 0 (Not master dead).

MySQL Replication Health is OK.&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ Slave 2, 3 상태 -&amp;gt; read_only&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1659178567857&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@jh-slave2 ~]# vi /etc/my.cnf
read_only=1


mysql&amp;gt; show variables like 'read_only';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| read_only     | ON    |
+---------------+-------+&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ 콘솔에서 Load&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt; balancer 생성&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1304&quot; data-origin-height=&quot;861&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8zcpH/btrIyxBohZ1/kgfn0VE3K7kEcElDE3ibGK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8zcpH/btrIyxBohZ1/kgfn0VE3K7kEcElDE3ibGK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8zcpH/btrIyxBohZ1/kgfn0VE3K7kEcElDE3ibGK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8zcpH%2FbtrIyxBohZ1%2Fkgfn0VE3K7kEcElDE3ibGK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1304&quot; height=&quot;861&quot; data-origin-width=&quot;1304&quot; data-origin-height=&quot;861&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1650&quot; data-origin-height=&quot;715&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buB0i1/btrIC0h2u8D/MjGZa8MEZH51Ls1I2uId40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buB0i1/btrIC0h2u8D/MjGZa8MEZH51Ls1I2uId40/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buB0i1/btrIC0h2u8D/MjGZa8MEZH51Ls1I2uId40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbuB0i1%2FbtrIC0h2u8D%2FMjGZa8MEZH51Ls1I2uId40%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1650&quot; height=&quot;715&quot; data-origin-width=&quot;1650&quot; data-origin-height=&quot;715&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1662&quot; data-origin-height=&quot;763&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3bK54/btrIwGy2RPu/v8MIqOKrVF9e4yxri1TNn0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3bK54/btrIwGy2RPu/v8MIqOKrVF9e4yxri1TNn0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3bK54/btrIwGy2RPu/v8MIqOKrVF9e4yxri1TNn0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3bK54%2FbtrIwGy2RPu%2Fv8MIqOKrVF9e4yxri1TNn0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1662&quot; height=&quot;763&quot; data-origin-width=&quot;1662&quot; data-origin-height=&quot;763&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;※ DB서버 ACG port 3306 open되어야 합니다.&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1638&quot; data-origin-height=&quot;343&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAPniY/btrIwH5PzPm/hhhfNdNbfONSTKE4X3Q1N1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAPniY/btrIwH5PzPm/hhhfNdNbfONSTKE4X3Q1N1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAPniY/btrIwH5PzPm/hhhfNdNbfONSTKE4X3Q1N1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAPniY%2FbtrIwH5PzPm%2FhhhfNdNbfONSTKE4X3Q1N1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1638&quot; height=&quot;343&quot; data-origin-width=&quot;1638&quot; data-origin-height=&quot;343&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;■&lt;b&gt; 같은 대역에 있는 Client 서버에서 LB로 접속&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1659178628993&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;## Client서버에서 접속할 유저 생성

&amp;lt;Master&amp;gt;
mysql&amp;gt; create user test@'10.62.8.243' identified by 'test';
Query OK, 0 rows affected (0.01 sec)

mysql&amp;gt; grant all on *.* to test@'10.62.8.243';
Query OK, 0 rows affected (0.00 sec)




## LB를 통해 DB접속 (exit이후 재접속시 LB알고리즘에 따라 교차 접속확인)
[root@myclient ~]# mysql -h 10.62.8.243 -utest -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 21
Server version: 8.0.28 MySQL Community Server - GPL

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]&amp;gt; select @@hostname;
+------------+
| @@hostname |
+------------+
| jh-slave2  |
+------------+
1 row in set (0.001 sec)


MySQL [(none)]&amp;gt; exit
Bye

[root@myclient ~]# mysql -h 10.62.8.243 -utest -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 17
Server version: 8.0.28 MySQL Community Server - GPL

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]&amp;gt; select @@hostname;
+------------+
| @@hostname |
+------------+
| jh-slave3  |
+------------+
1 row in set (0.001 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ 대량&lt;/span&gt; &lt;span&gt;데이터 삽입(10만건)&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1659178646634&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;Master&amp;gt;
mysql&amp;gt; create database jh;
Query OK, 1 row affected (0.00 sec)

mysql&amp;gt; use jh;
Database changed

mysql&amp;gt; CREATE TABLE Nonprimenumber(num INT PRIMARY KEY);
Query OK, 0 rows affected (0.01 sec)

mysql&amp;gt; DELIMITER $$
mysql&amp;gt; CREATE PROCEDURE myFunction()
    -&amp;gt; BEGIN
    -&amp;gt;     DECLARE i INT DEFAULT 1;
    -&amp;gt;     WHILE (i &amp;lt;= 100000) DO
    -&amp;gt;         INSERT INTO `Nonprimenumber` VALUE (i);
    -&amp;gt;         SET i = i + 1;
    -&amp;gt;     END WHILE;
    -&amp;gt; END$$
Query OK, 0 rows affected (0.00 sec)

mysql&amp;gt; DELIMITER ;
mysql&amp;gt; call myFunction();



## Slave2의 replication을 늦게 맺워 줬더니 insert 속도 차이가 난다.
[root@myclient ~]# mysql -h 10.62.8.243 -utest -ptest -e'select count(*) from jh.Nonprimenumber;'
+----------+
| count(*) |
+----------+
|    22405 |
+----------+

[root@myclient ~]# mysql -h 10.62.8.243 -utest -ptest -e'select count(*) from jh.Nonprimenumber;'
+----------+
| count(*) |
+----------+
|    91205 |
+----------+




## 테이블 조회시 slave2에 붙을땐 10만건이 조회되지 않음 -&amp;gt; 비동기 방식이라 LB를 통해 부하분산을 하더라도 붙는 세션별로 insert된 데이터가 다를 경우가 있어 조회시 데이터가 없을 수 있을 거 같다. 하지만 크게 문제될 정도의 속도 차이는 아니며 대량의 insert 작업을 배치작업으로 조금씩 쪼개어 작업한다면 문제 없을 거 같습니다.

[root@myclient ~]# mysql -h 10.62.8.243 -utest -ptest -e'select * from jh.Nonprimenumber;'
...
|  99989 |
|  99990 |
|  99991 |
|  99992 |
|  99993 |
|  99994 |
|  99995 |
|  99996 |
|  99997 |
|  99998 |
|  99999 |
| 100000 |
+--------+&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;사진 출처&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://hoing.io/archives/9175&quot;&gt;https://hoing.io/archives/9175&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1659178665325&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;MySQL MHA(Master High Availability) 1 - MHA 기능 설명 및 아키텍처 설명&quot; data-og-description=&quot; &quot; data-og-host=&quot;hoing.io&quot; data-og-source-url=&quot;https://hoing.io/archives/9175&quot; data-og-url=&quot;https://hoing.io/archives/9175&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/sXj2L/hyPf0ijP4z/2tBRd727V4OcxuKniejYG1/img.png?width=535&amp;amp;height=408&amp;amp;face=0_0_535_408,https://scrap.kakaocdn.net/dn/cC1FG3/hyPf12A30r/scVNg2nBDCUevUHvpPJW40/img.png?width=535&amp;amp;height=408&amp;amp;face=0_0_535_408,https://scrap.kakaocdn.net/dn/o3BGt/hyPf3szpCE/JVp5VoCBkGDz4kSm7H0In1/img.png?width=759&amp;amp;height=500&amp;amp;face=0_0_759_500&quot;&gt;&lt;a href=&quot;https://hoing.io/archives/9175&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://hoing.io/archives/9175&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/sXj2L/hyPf0ijP4z/2tBRd727V4OcxuKniejYG1/img.png?width=535&amp;amp;height=408&amp;amp;face=0_0_535_408,https://scrap.kakaocdn.net/dn/cC1FG3/hyPf12A30r/scVNg2nBDCUevUHvpPJW40/img.png?width=535&amp;amp;height=408&amp;amp;face=0_0_535_408,https://scrap.kakaocdn.net/dn/o3BGt/hyPf3szpCE/JVp5VoCBkGDz4kSm7H0In1/img.png?width=759&amp;amp;height=500&amp;amp;face=0_0_759_500');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;MySQL MHA(Master High Availability) 1 - MHA 기능 설명 및 아키텍처 설명&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hoing.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>DataBase/MySQL &amp;amp; MariaDB</category>
      <category>LoadBalancer</category>
      <category>mha</category>
      <category>ncp</category>
      <category>부하분산</category>
      <author>jeonghyun</author>
      <guid isPermaLink="true">https://jhdatabase.tistory.com/103</guid>
      <comments>https://jhdatabase.tistory.com/entry/MySQL-4node-MHA-select-%EB%B6%80%ED%95%98%EB%B6%84%EC%82%B0-use-NCP-Loadbalancer#entry103comment</comments>
      <pubDate>Sat, 30 Jul 2022 19:59:04 +0900</pubDate>
    </item>
    <item>
      <title>[MySQL - 4node MHA 구축 &amp;amp; failover테스트] part 2.</title>
      <link>https://jhdatabase.tistory.com/entry/MySQL-4node-MHA-%EA%B5%AC%EC%B6%95-failover%ED%85%8C%EC%8A%A4%ED%8A%B8-part-2</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;part1에 이어 구축 진행 및 failover테스트를 하도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;part1 : &lt;a href=&quot;https://jhdatabase.tistory.com/101&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://jhdatabase.tistory.com/101&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1659178022271&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[MySQL - 4node MHA 구축] part 1.&quot; data-og-description=&quot;그동안 master-slave 구조에서의 mha는 2node가 보통입니다. 이번 포스팅에선 총 4node를 구성할 예정이며 master와 slave 3대를 구축하여 LB를 통해 부하분산이 최종 목표입니다. 테스트 환경 Hostname Public I.&quot; data-og-host=&quot;jhdatabase.tistory.com&quot; data-og-source-url=&quot;https://jhdatabase.tistory.com/101&quot; data-og-url=&quot;https://jhdatabase.tistory.com/101&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cPAzTp/hyPf0byFdB/EXfGs43akCpgDYJQrg1KLk/img.png?width=800&amp;amp;height=418&amp;amp;face=0_0_800_418,https://scrap.kakaocdn.net/dn/bAEBxr/hyPf1IiQVm/V0ZOx4TcKAGmmkB6xK7jGK/img.png?width=800&amp;amp;height=418&amp;amp;face=0_0_800_418,https://scrap.kakaocdn.net/dn/bADuSQ/hyPf7ocL9V/sgrny3482Cl0wOcwYfqCTK/img.jpg?width=1440&amp;amp;height=1080&amp;amp;face=0_0_1440_1080&quot;&gt;&lt;a href=&quot;https://jhdatabase.tistory.com/101&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://jhdatabase.tistory.com/101&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cPAzTp/hyPf0byFdB/EXfGs43akCpgDYJQrg1KLk/img.png?width=800&amp;amp;height=418&amp;amp;face=0_0_800_418,https://scrap.kakaocdn.net/dn/bAEBxr/hyPf1IiQVm/V0ZOx4TcKAGmmkB6xK7jGK/img.png?width=800&amp;amp;height=418&amp;amp;face=0_0_800_418,https://scrap.kakaocdn.net/dn/bADuSQ/hyPf7ocL9V/sgrny3482Cl0wOcwYfqCTK/img.jpg?width=1440&amp;amp;height=1080&amp;amp;face=0_0_1440_1080');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[MySQL - 4node MHA 구축] part 1.&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;그동안 master-slave 구조에서의 mha는 2node가 보통입니다. 이번 포스팅에선 총 4node를 구성할 예정이며 master와 slave 3대를 구축하여 LB를 통해 부하분산이 최종 목표입니다. 테스트 환경 Hostname Public I.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;jhdatabase.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ MHA scripts 수정&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1659178048085&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@jh-mgr ~]# cp /root/mha4mysql-manager-0.57/samples/scripts/master_ip_failover  /var/log/masterha/app1/custom_scripts/

[root@jh-mgr ~]# vi /var/log/masterha/app1/custom_scripts/master_ip_failover
:set nu
86~93 주석 처리
     86       ## Creating an app user on the new master
     87       #print &quot;Creating app user on the new master..\n&quot;;
     88       #FIXME_xxx_create_user( $new_master_handler-&amp;gt;{dbh} );
     89       #$new_master_handler-&amp;gt;enable_log_bin_local();
     90       #$new_master_handler-&amp;gt;disconnect();
     91
     92       ## Update master ip on the catalog database, etc
     93       #FIXME_xxx;
     94     system(&quot;/bin/bash /var/log/masterha/app1/custom_scripts/mha_change_vip.sh $new_master_ip&quot;);      ##추가




[root@jh-mgr mha4mysql-manager-0.57]# cp /root/mha4mysql-manager-0.57/samples/scripts/master_ip_online_change  /var/log/masterha/app1/custom_scripts/

[root@jh-mgr ~]# vi /var/log/masterha/app1/custom_scripts/master_ip_online_change
:set nu

149~152 주석 처리
149       ## Drop application user so that nobody can connect. Disabling per-session binlog b    eforehand
150       #$orig_master_handler-&amp;gt;disable_log_bin_local();
151       #print current_time_us() . &quot; Drpping app user on the orig master..\n&quot;;
152       #FIXME_xxx_drop_app_user($orig_master_handler);

244~248 주석 처리
244       ## Creating an app user on the new master
245       #print current_time_us() . &quot; Creating app user on the new master..\n&quot;;
246       #FIXME_xxx_create_app_user($new_master_handler);
247       #$new_master_handler-&amp;gt;enable_log_bin_local();
248       #$new_master_handler-&amp;gt;disconnect();
249
250       ## Update master ip on the catalog database, etc
251      system(&quot;/bin/bash /var/log/masterha/app1/custom_scripts/mha_change_vip.sh $new_master_ip&quot;);      ##추가&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ vip change 스크립트 수정&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1659178078775&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@jh-mgr custom_scripts]# vi mha_change_vip.sh

#!/bin/bash
## Fail-Over VIP Change

V_NEW_MASTER=`cat /etc/hosts | grep $1 | awk '{print $2}'`
V_EXIST_VIP_CHK=`ping -c 1 -W 1 mha-master-vip | grep &quot;packet loss&quot; | awk '{print $6}'`
V_VIP_IP=`cat /etc/hosts | grep mha-master-vip | awk '{print $1}'`

if [ $V_EXIST_VIP_CHK = &quot;0%&quot; ]
then

echo &quot;VIP IS Alive, VIP Relocate $V_NEW_MASTER &quot;
/bin/ssh mha-master-vip /bin/sudo /sbin/ifconfig eth1:1 down &amp;amp;

ssh $V_NEW_MASTER /bin/sudo /sbin/ifconfig eth1:1 $V_VIP_IP netmask 255.255.255.0
ssh $V_NEW_MASTER /sbin/arping -c 5 -D -I eth1:1 -s $V_VIP_IP $V_VIP_IP
VIP_NOHUP_PS=`ps -ef| grep &quot;ifconfig eth1:1&quot; | grep ssh | grep -v grep | awk '{print $2}'` &amp;amp;&amp;amp; kill -9 $VIP_NOHUP_PS

elif [ $V_EXIST_VIP_CHK = &quot;100%&quot; ]
then

echo &quot;VIP IS dead, VIP Relocate $V_NEW_MASTER &quot;
/bin/ssh $V_NEW_MASTER /bin/sudo /sbin/ifconfig eth1:1 $V_VIP_IP netmask 255.255.255.0
/bin/ssh $V_NEW_MASTER /sbin/arping -c 5 -D -I eth1:1 -s $V_VIP_IP $V_VIP_IP

fi



[root@jh-mgr custom_scripts]# chmod 755 mha_change_vip.sh


## script를 한번씩 실행시켜 vip가 잘 넘어가는지 확인
[root@jh-mgr custom_scripts]#  ./mha_change_vip.sh 192.168.100.36
[root@jh-mgr custom_scripts]#  ./mha_change_vip.sh 192.168.100.37
[root@jh-mgr custom_scripts]#  ./mha_change_vip.sh 192.168.100.38
[root@jh-mgr custom_scripts]#  ./mha_change_vip.sh 192.168.100.39



[root@jh-mgr ~]# sshcheck
Wed Jul 20 17:01:55 2022 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
Wed Jul 20 17:01:55 2022 - [info] Reading application default configuration from /etc/mha.cnf..
Wed Jul 20 17:01:55 2022 - [info] Reading server configuration from /etc/mha.cnf..
Wed Jul 20 17:01:55 2022 - [info] Starting SSH connection tests..
Wed Jul 20 17:01:56 2022 - [debug]
Wed Jul 20 17:01:55 2022 - [debug]  Connecting via SSH from root@192.168.100.36(192.168.100.36:22) to root@192.168.100.37(192.168.100.37:22)..
Wed Jul 20 17:01:55 2022 - [debug]   ok.
Wed Jul 20 17:01:55 2022 - [debug]  Connecting via SSH from root@192.168.100.36(192.168.100.36:22) to root@192.168.100.38(192.168.100.38:22)..
Wed Jul 20 17:01:55 2022 - [debug]   ok.
Wed Jul 20 17:01:55 2022 - [debug]  Connecting via SSH from root@192.168.100.36(192.168.100.36:22) to root@192.168.100.39(192.168.100.39:22)..
Wed Jul 20 17:01:55 2022 - [debug]   ok.
Wed Jul 20 17:01:56 2022 - [debug]
Wed Jul 20 17:01:55 2022 - [debug]  Connecting via SSH from root@192.168.100.37(192.168.100.37:22) to root@192.168.100.36(192.168.100.36:22)..
Wed Jul 20 17:01:55 2022 - [debug]   ok.
Wed Jul 20 17:01:55 2022 - [debug]  Connecting via SSH from root@192.168.100.37(192.168.100.37:22) to root@192.168.100.38(192.168.100.38:22)..
Wed Jul 20 17:01:56 2022 - [debug]   ok.
Wed Jul 20 17:01:56 2022 - [debug]  Connecting via SSH from root@192.168.100.37(192.168.100.37:22) to root@192.168.100.39(192.168.100.39:22)..
Wed Jul 20 17:01:56 2022 - [debug]   ok.
Wed Jul 20 17:01:57 2022 - [debug]
Wed Jul 20 17:01:56 2022 - [debug]  Connecting via SSH from root@192.168.100.38(192.168.100.38:22) to root@192.168.100.36(192.168.100.36:22)..
Wed Jul 20 17:01:56 2022 - [debug]   ok.
Wed Jul 20 17:01:56 2022 - [debug]  Connecting via SSH from root@192.168.100.38(192.168.100.38:22) to root@192.168.100.37(192.168.100.37:22)..
Wed Jul 20 17:01:56 2022 - [debug]   ok.
Wed Jul 20 17:01:56 2022 - [debug]  Connecting via SSH from root@192.168.100.38(192.168.100.38:22) to root@192.168.100.39(192.168.100.39:22)..
Wed Jul 20 17:01:56 2022 - [debug]   ok.
Wed Jul 20 17:01:58 2022 - [debug]
Wed Jul 20 17:01:56 2022 - [debug]  Connecting via SSH from root@192.168.100.39(192.168.100.39:22) to root@192.168.100.36(192.168.100.36:22)..
Wed Jul 20 17:01:56 2022 - [debug]   ok.
Wed Jul 20 17:01:56 2022 - [debug]  Connecting via SSH from root@192.168.100.39(192.168.100.39:22) to root@192.168.100.37(192.168.100.37:22)..
Wed Jul 20 17:01:57 2022 - [debug]   ok.
Wed Jul 20 17:01:57 2022 - [debug]  Connecting via SSH from root@192.168.100.39(192.168.100.39:22) to root@192.168.100.38(192.168.100.38:22)..
Wed Jul 20 17:01:57 2022 - [debug]   ok.
Wed Jul 20 17:01:58 2022 - [info] All SSH connection tests passed successfully.
Use of uninitialized value in exit at /usr/local/bin/masterha_check_ssh line 44.




[root@jh-mgr ~]# replcheck
Wed Jul 20 17:26:57 2022 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
Wed Jul 20 17:26:57 2022 - [info] Reading application default configuration from /etc/mha.cnf..
Wed Jul 20 17:26:57 2022 - [info] Reading server configuration from /etc/mha.cnf..
Wed Jul 20 17:26:57 2022 - [info] MHA::MasterMonitor version 0.57.
Wed Jul 20 17:26:58 2022 - [info] GTID failover mode = 0
Wed Jul 20 17:26:58 2022 - [info] Dead Servers:
Wed Jul 20 17:26:58 2022 - [info] Alive Servers:
Wed Jul 20 17:26:58 2022 - [info]   master(192.168.100.36:3306)
Wed Jul 20 17:26:58 2022 - [info]   slave1(192.168.100.37:3306)
Wed Jul 20 17:26:58 2022 - [info]   slave2(192.168.100.38:3306)
Wed Jul 20 17:26:58 2022 - [info]   slave3(192.168.100.39:3306)
Wed Jul 20 17:26:58 2022 - [info] Alive Slaves:
Wed Jul 20 17:26:58 2022 - [info]   slave1(192.168.100.37:3306)  Version=8.0.28 (oldest major version between slaves) log-bin:enabled
Wed Jul 20 17:26:58 2022 - [info]     Replicating from 192.168.100.36(192.168.100.36:3306)
Wed Jul 20 17:26:58 2022 - [info]   slave2(192.168.100.38:3306)  Version=8.0.28 (oldest major version between slaves) log-bin:enabled
Wed Jul 20 17:26:58 2022 - [info]     Replicating from 192.168.100.36(192.168.100.36:3306)
Wed Jul 20 17:26:58 2022 - [info]   slave3(192.168.100.39:3306)  Version=8.0.28 (oldest major version between slaves) log-bin:enabled
Wed Jul 20 17:26:58 2022 - [info]     Replicating from 192.168.100.36(192.168.100.36:3306)
Wed Jul 20 17:26:58 2022 - [info] Current Alive Master: master(192.168.100.36:3306)
Wed Jul 20 17:26:58 2022 - [info] Checking slave configurations..
Wed Jul 20 17:26:58 2022 - [info]  read_only=1 is not set on slave slave1(192.168.100.37:3306).
Wed Jul 20 17:26:58 2022 - [info]  read_only=1 is not set on slave slave2(192.168.100.38:3306).
Wed Jul 20 17:26:58 2022 - [info]  read_only=1 is not set on slave slave3(192.168.100.39:3306).
Wed Jul 20 17:26:58 2022 - [info] Checking replication filtering settings..
Wed Jul 20 17:26:58 2022 - [info]  binlog_do_db= , binlog_ignore_db=
Wed Jul 20 17:26:58 2022 - [info]  Replication filtering check ok.
Wed Jul 20 17:26:58 2022 - [info] GTID (with auto-pos) is not supported
Wed Jul 20 17:26:58 2022 - [info] Starting SSH connection tests..
Wed Jul 20 17:27:01 2022 - [info] All SSH connection tests passed successfully.
Wed Jul 20 17:27:01 2022 - [info] Checking MHA Node version..
Wed Jul 20 17:27:02 2022 - [info]  Version check ok.
Wed Jul 20 17:27:02 2022 - [info] Checking SSH publickey authentication settings on the current master..
Wed Jul 20 17:27:02 2022 - [info] HealthCheck: SSH to master is reachable.
Wed Jul 20 17:27:02 2022 - [info] Master MHA Node version is 0.57.
Wed Jul 20 17:27:02 2022 - [info] Checking recovery script configurations on master(192.168.100.36:3306)..
Wed Jul 20 17:27:02 2022 - [info]   Executing command: save_binary_logs --command=test --start_pos=4 --binlog_dir=/data --output_file=/var/log/masterha/app5/save_binary_logs_test --manager_version=0.57 --start_file=mariadb-bin.000005
Wed Jul 20 17:27:02 2022 - [info]   Connecting to root@192.168.100.36(master:22)..
  Creating /var/log/masterha/app5 if not exists..    ok.
  Checking output directory is accessible or not..
   ok.
  Binlog found at /data, up to mariadb-bin.000005
Wed Jul 20 17:27:02 2022 - [info] Binlog setting check done.
Wed Jul 20 17:27:02 2022 - [info] Checking SSH publickey authentication and checking recovery script configurations on all alive slave servers..
Wed Jul 20 17:27:02 2022 - [info]   Executing command : apply_diff_relay_logs --command=test --slave_user='repl' --slave_host=slave1 --slave_ip=192.168.100.37 --slave_port=3306 --workdir=/var/log/masterha/app5 --target_version=8.0.28 --manager_version=0.57 --relay_dir=/data --current_relay_log=relay-log.000004  --slave_pass=xxx
Wed Jul 20 17:27:02 2022 - [info]   Connecting to root@192.168.100.37(slave1:22)..
  Checking slave recovery environment settings..
    Relay log found at /data, up to relay-log.000004
    Temporary relay log file is /data/relay-log.000004
    Testing mysql connection and privileges..mysql: [Warning] Using a password on the command line interface can be insecure.
done.
    Testing mysqlbinlog output.. done.
    Cleaning up test file(s).. done.
Wed Jul 20 17:27:02 2022 - [info]   Executing command : apply_diff_relay_logs --command=test --slave_user='repl' --slave_host=slave2 --slave_ip=192.168.100.38 --slave_port=3306 --workdir=/var/log/masterha/app5 --target_version=8.0.28 --manager_version=0.57 --relay_dir=/data --current_relay_log=relay-log.000004  --slave_pass=xxx
Wed Jul 20 17:27:02 2022 - [info]   Connecting to root@192.168.100.38(slave2:22)..
  Checking slave recovery environment settings..
    Relay log found at /data, up to relay-log.000004
    Temporary relay log file is /data/relay-log.000004
    Testing mysql connection and privileges..mysql: [Warning] Using a password on the command line interface can be insecure.
done.
    Testing mysqlbinlog output.. done.
    Cleaning up test file(s).. done.
Wed Jul 20 17:27:03 2022 - [info]   Executing command : apply_diff_relay_logs --command=test --slave_user='repl' --slave_host=slave3 --slave_ip=192.168.100.39 --slave_port=3306 --workdir=/var/log/masterha/app5 --target_version=8.0.28 --manager_version=0.57 --relay_dir=/data --current_relay_log=relay-log.000004  --slave_pass=xxx
Wed Jul 20 17:27:03 2022 - [info]   Connecting to root@192.168.100.39(slave3:22)..
  Checking slave recovery environment settings..
    Relay log found at /data, up to relay-log.000004
    Temporary relay log file is /data/relay-log.000004
    Testing mysql connection and privileges..mysql: [Warning] Using a password on the command line interface can be insecure.
done.
    Testing mysqlbinlog output.. done.
    Cleaning up test file(s).. done.
Wed Jul 20 17:27:03 2022 - [info] Slaves settings check done.
Wed Jul 20 17:27:03 2022 - [info]
master(192.168.100.36:3306) (current master)
+--slave1(192.168.100.37:3306)
+--slave2(192.168.100.38:3306)
+--slave3(192.168.100.39:3306)

Wed Jul 20 17:27:03 2022 - [info] Checking replication health on slave1..
Wed Jul 20 17:27:03 2022 - [info]  ok.
Wed Jul 20 17:27:03 2022 - [info] Checking replication health on slave2..
Wed Jul 20 17:27:03 2022 - [info]  ok.
Wed Jul 20 17:27:03 2022 - [info] Checking replication health on slave3..
Wed Jul 20 17:27:03 2022 - [info]  ok.
Wed Jul 20 17:27:03 2022 - [info] Checking master_ip_failover_script status:
Wed Jul 20 17:27:03 2022 - [info]   /var/log/masterha/app1/custom_scripts/master_ip_failover --command=status --ssh_user=root --orig_master_host=master --orig_master_ip=192.168.100.36 --orig_master_port=3306
Wed Jul 20 17:27:03 2022 - [info]  OK.
Wed Jul 20 17:27:03 2022 - [warning] shutdown_script is not defined.
Wed Jul 20 17:27:03 2022 - [info] Got exit code 0 (Not master dead).

MySQL Replication Health is OK.




[root@jh-mgr custom_scripts]# start

[root@jh-mgr ~]# status
mha (pid:1575) is running(0:PING_OK), master:192.168.100.36&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ Failover test&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;Master -&amp;gt; Slave1&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;※ Master role 선정 방법&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;1) 마스터DB 장애 발생시 세 대의 slave DB 중 가장 최신의 slave DB 탐색합니다.&lt;/div&gt;
&lt;div&gt;2) 나머지 slave DB의 SQL thread가 relay log 를 모두 읽을 때 까지 대기합니다.&lt;/div&gt;
&lt;div&gt;3) 이후 , 최신 slave DB와 비교 하여 값 적용&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;최신 Slave 찾는 방법&amp;nbsp;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;1)show slave status\G로 각 slave DB의 relay log를 확인&lt;/div&gt;
&lt;div&gt;2)relay log에서 end_log_pos 값 비교&lt;/div&gt;
&lt;pre id=&quot;code_1659178156796&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;Master&amp;gt;
[root@jh-master ~]# ps -ef | grep mysql
root      22833  19707  0 14:53 pts/1    00:00:00 /bin/sh /mysql/bin/mysqld_safe --user=mysql
mysql     23080  22833  0 14:53 pts/1    00:00:00 /mysql/bin/mysqld --basedir=/mysql --datadir=/data --plugin-dir=/mysql/lib/plugin --user=mysql --log-error=/log/mariadb.log --pid-file=/log/mariadb.pid --socket=/tmp/mysql.sock
root      23594  19707  0 14:54 pts/1    00:00:00 grep --color=auto mysql


[root@jh-master ~]# kill -9 23080 22833



&amp;lt;Master&amp;gt;
[root@jh-master ~]# ifconfig
eth0: flags=4163&amp;lt;UP,BROADCAST,RUNNING,MULTICAST&amp;gt;  mtu 1500
        inet 10.41.216.208  netmask 255.255.254.0  broadcast 10.41.217.255
        ether f2:20:cd:e1:e4:64  txqueuelen 1000  (Ethernet)
        RX packets 318635  bytes 1307578034 (1.2 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 195905  bytes 25655179 (24.4 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth1: flags=4163&amp;lt;UP,BROADCAST,RUNNING,MULTICAST&amp;gt;  mtu 1500
        inet 192.168.100.36  netmask 255.255.255.0  broadcast 192.168.100.255
        ether f2:d7:cf:cc:bb:f0  txqueuelen 1000  (Ethernet)
        RX packets 114467  bytes 7938512 (7.5 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 47184  bytes 5884806 (5.6 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73&amp;lt;UP,LOOPBACK,RUNNING&amp;gt;  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1  (Local Loopback)
        RX packets 12  bytes 1164 (1.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 12  bytes 1164 (1.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0



&amp;lt;Slave1&amp;gt;
[root@jh-slave1 app5]# ifconfig
eth0: flags=4163&amp;lt;UP,BROADCAST,RUNNING,MULTICAST&amp;gt;  mtu 1500
        inet 10.41.42.80  netmask 255.255.254.0  broadcast 10.41.43.255
        ether f2:20:cd:a6:26:a6  txqueuelen 1000  (Ethernet)
        RX packets 1711020  bytes 1413540589 (1.3 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 415801  bytes 161079865 (153.6 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth1: flags=4163&amp;lt;UP,BROADCAST,RUNNING,MULTICAST&amp;gt;  mtu 1500
        inet 192.168.100.37  netmask 255.255.255.0  broadcast 192.168.100.255
        ether f2:d7:cf:b6:15:ef  txqueuelen 1000  (Ethernet)
        RX packets 2567403  bytes 203430207 (194.0 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1660750  bytes 195603259 (186.5 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth1:1: flags=4163&amp;lt;UP,BROADCAST,RUNNING,MULTICAST&amp;gt;  mtu 1500
        inet 192.168.100.40  netmask 255.255.255.0  broadcast 192.168.100.255
        ether f2:d7:cf:b6:15:ef  txqueuelen 1000  (Ethernet)

lo: flags=73&amp;lt;UP,LOOPBACK,RUNNING&amp;gt;  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1  (Local Loopback)
        RX packets 937  bytes 162686 (158.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 937  bytes 162686 (158.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0




[root@jh-mgr custom_scripts]# log
Selected 192.168.100.37(192.168.100.37:3306) as a new master.
192.168.100.37(192.168.100.37:3306): OK: Applying all logs succeeded.
192.168.100.37(192.168.100.37:3306): OK: Activated master IP address.
192.168.100.39(192.168.100.39:3306): This host has the latest relay log events.
192.168.100.38(192.168.100.38:3306): This host has the latest relay log events.
Generating relay diff files from the latest slave succeeded.
192.168.100.38(192.168.100.38:3306): OK: Applying all logs succeeded. Slave started, replicating from 192.168.100.37(192.168.100.37:3306)
192.168.100.39(192.168.100.39:3306): OK: Applying all logs succeeded. Slave started, replicating from 192.168.100.37(192.168.100.37:3306)
192.168.100.37(192.168.100.37:3306): Resetting slave info succeeded.
Master failover to 192.168.100.37(192.168.100.37:3306) completed successfully.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;Slave1 -&amp;gt; Master&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1659178177863&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;## 예전 master를 현master의 slave로 등록
mysql&amp;gt; CHANGE MASTER TO MASTER_HOST='192.168.100.37', MASTER_USER='repl',MASTER_PASSWORD='repl',MASTER_PORT=3306,MASTER_LOG_FILE='mariadb-bin.000008', MASTER_LOG_POS=157,MASTER_CONNECT_RETRY=10;
Query OK, 0 rows affected, 10 warnings (0.02 sec)


mysql&amp;gt; start slave;
Query OK, 0 rows affected, 1 warning (0.01 sec)


[root@jh-mgr ~]# sshcheck

[root@jh-mgr ~]# replcheck
...(생략)
Tue Jul 26 16:04:47 2022 - [info] Checking replication health on 192.168.100.36..
Tue Jul 26 16:04:47 2022 - [info]  ok.
Tue Jul 26 16:04:47 2022 - [info] Checking replication health on 192.168.100.38..
Tue Jul 26 16:04:47 2022 - [info]  ok.
Tue Jul 26 16:04:47 2022 - [info] Checking replication health on 192.168.100.39..
Tue Jul 26 16:04:47 2022 - [info]  ok.
Tue Jul 26 16:04:47 2022 - [info] Checking master_ip_failover_script status:
Tue Jul 26 16:04:47 2022 - [info]   /var/log/masterha/app1/custom_scripts/master_ip_failover --command=status --ssh_user=root --orig_master_host=192.168.100.37 --orig_master_ip=192.168.100.37 --orig_master_port=3306
Tue Jul 26 16:04:47 2022 - [info]  OK.
Tue Jul 26 16:04:47 2022 - [warning] shutdown_script is not defined.
Tue Jul 26 16:04:47 2022 - [info] Got exit code 0 (Not master dead).

MySQL Replication Health is OK.


## failover 이후 만들어지는 파일 삭제
[root@jh-mgr app1]# rm -rf /var/log/masterha/app1/mha.failover.complete


[root@jh-mgr ~]# start
[5] 3380
[root@jh-mgr ~]# Tue Jul 26 16:05:48 2022 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
Tue Jul 26 16:05:48 2022 - [info] Reading application default configuration from /etc/mha.cnf..
Tue Jul 26 16:05:48 2022 - [info] Reading server configuration from /etc/mha.cnf..


[root@jh-mgr ~]# status
mha (pid:3380) is running(0:PING_OK), master:192.168.100.37





&amp;lt;Slave1&amp;gt; mysql kill
[root@jh-slave1 ~]# ps -ef | grep mysql
root     21851 19672  0 14:36 pts/0    00:00:00 /bin/sh /mysql/bin/mysqld_safe --user=mysql
mysql    22098 21851  0 14:36 pts/0    00:00:18 /mysql/bin/mysqld --basedir=/mysql --datadir=/data --plugin-dir=/mysql/lib/plugin --user=mysql --log-error=/log/mariadb.log --pid-file=/log/mariadb.pid --socket=/tmp/mysql.sock
root     27331 19672  0 16:07 pts/0    00:00:00 grep --color=auto mysql

[root@jh-slave1 ~]# kill -9 21851 22098



[root@jh-slave1 ~]# ifconfig
eth0: flags=4163&amp;lt;UP,BROADCAST,RUNNING,MULTICAST&amp;gt;  mtu 1500
        inet 10.41.42.80  netmask 255.255.254.0  broadcast 10.41.43.255
        ether f2:20:cd:a6:26:a6  txqueuelen 1000  (Ethernet)
        RX packets 1726198  bytes 1414715485 (1.3 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 417688  bytes 162547392 (155.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth1: flags=4163&amp;lt;UP,BROADCAST,RUNNING,MULTICAST&amp;gt;  mtu 1500
        inet 192.168.100.37  netmask 255.255.255.0  broadcast 192.168.100.255
        ether f2:d7:cf:b6:15:ef  txqueuelen 1000  (Ethernet)
        RX packets 2596325  bytes 205991937 (196.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1680919  bytes 198115365 (188.9 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73&amp;lt;UP,LOOPBACK,RUNNING&amp;gt;  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1  (Local Loopback)
        RX packets 937  bytes 162686 (158.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 937  bytes 162686 (158.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0




[root@jh-master ~]# ifconfig
eth0: flags=4163&amp;lt;UP,BROADCAST,RUNNING,MULTICAST&amp;gt;  mtu 1500
        inet 10.41.216.208  netmask 255.255.254.0  broadcast 10.41.217.255
        ether f2:20:cd:e1:e4:64  txqueuelen 1000  (Ethernet)
        RX packets 1695115  bytes 1415112531 (1.3 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 341152  bytes 170990651 (163.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth1: flags=4163&amp;lt;UP,BROADCAST,RUNNING,MULTICAST&amp;gt;  mtu 1500
        inet 192.168.100.36  netmask 255.255.255.0  broadcast 192.168.100.255
        ether f2:d7:cf:cc:bb:f0  txqueuelen 1000  (Ethernet)
        RX packets 1215697  bytes 64396280 (61.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 204667  bytes 18203625 (17.3 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth1:1: flags=4163&amp;lt;UP,BROADCAST,RUNNING,MULTICAST&amp;gt;  mtu 1500
        inet 192.168.100.40  netmask 255.255.255.0  broadcast 192.168.100.255
        ether f2:d7:cf:cc:bb:f0  txqueuelen 1000  (Ethernet)

lo: flags=73&amp;lt;UP,LOOPBACK,RUNNING&amp;gt;  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1  (Local Loopback)
        RX packets 655  bytes 111811 (109.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 655  bytes 111811 (109.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;참고 &amp;amp; 사진 출처&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://hoing.io/archives/9175&quot;&gt;https://hoing.io/archives/9175&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1659178232172&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;MySQL MHA(Master High Availability) 1 - MHA 기능 설명 및 아키텍처 설명&quot; data-og-description=&quot; &quot; data-og-host=&quot;hoing.io&quot; data-og-source-url=&quot;https://hoing.io/archives/9175&quot; data-og-url=&quot;https://hoing.io/archives/9175&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/sXj2L/hyPf0ijP4z/2tBRd727V4OcxuKniejYG1/img.png?width=535&amp;amp;height=408&amp;amp;face=0_0_535_408,https://scrap.kakaocdn.net/dn/cC1FG3/hyPf12A30r/scVNg2nBDCUevUHvpPJW40/img.png?width=535&amp;amp;height=408&amp;amp;face=0_0_535_408,https://scrap.kakaocdn.net/dn/o3BGt/hyPf3szpCE/JVp5VoCBkGDz4kSm7H0In1/img.png?width=759&amp;amp;height=500&amp;amp;face=0_0_759_500&quot;&gt;&lt;a href=&quot;https://hoing.io/archives/9175&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://hoing.io/archives/9175&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/sXj2L/hyPf0ijP4z/2tBRd727V4OcxuKniejYG1/img.png?width=535&amp;amp;height=408&amp;amp;face=0_0_535_408,https://scrap.kakaocdn.net/dn/cC1FG3/hyPf12A30r/scVNg2nBDCUevUHvpPJW40/img.png?width=535&amp;amp;height=408&amp;amp;face=0_0_535_408,https://scrap.kakaocdn.net/dn/o3BGt/hyPf3szpCE/JVp5VoCBkGDz4kSm7H0In1/img.png?width=759&amp;amp;height=500&amp;amp;face=0_0_759_500');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;MySQL MHA(Master High Availability) 1 - MHA 기능 설명 및 아키텍처 설명&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hoing.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>DataBase/MySQL &amp;amp; MariaDB</category>
      <category>mha</category>
      <category>mysql</category>
      <author>jeonghyun</author>
      <guid isPermaLink="true">https://jhdatabase.tistory.com/102</guid>
      <comments>https://jhdatabase.tistory.com/entry/MySQL-4node-MHA-%EA%B5%AC%EC%B6%95-failover%ED%85%8C%EC%8A%A4%ED%8A%B8-part-2#entry102comment</comments>
      <pubDate>Sat, 30 Jul 2022 19:51:25 +0900</pubDate>
    </item>
    <item>
      <title>[MySQL - 4node MHA 구축] part 1.</title>
      <link>https://jhdatabase.tistory.com/entry/MySQL-4node-MHA-%EA%B5%AC%EC%B6%95-part-1</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;그동안 master-slave 구조에서의 mha는 2node가 보통입니다. 이번 포스팅에선 총 4node를 구성할 예정이며 master와 slave 3대를 구축하여 LB를 통해 부하분산이 최종 목표입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;821&quot; data-origin-height=&quot;593&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Xgo0t/btrIBUCmr8J/vuh8X7kpP3TvOBFfADWSgk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Xgo0t/btrIBUCmr8J/vuh8X7kpP3TvOBFfADWSgk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Xgo0t/btrIBUCmr8J/vuh8X7kpP3TvOBFfADWSgk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXgo0t%2FbtrIBUCmr8J%2Fvuh8X7kpP3TvOBFfADWSgk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;821&quot; height=&quot;593&quot; data-origin-width=&quot;821&quot; data-origin-height=&quot;593&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;테스트 환경&lt;/b&gt;&lt;/blockquote&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 102px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;Hostname&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;Public IP&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;Private IP&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;DB version&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;Role&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;VIP&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;
&lt;div&gt;&lt;span&gt;jh-mgr&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;
&lt;div&gt;115.85.183.80&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;
&lt;div&gt;192.168.100.35&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;
&lt;div&gt;MHA manager&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;
&lt;div&gt;&lt;span&gt;jh-master&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;
&lt;div&gt;101.101.210.29&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;
&lt;div&gt;192.168.100.36&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;
&lt;div&gt;Mysql 8.0.28&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;
&lt;div&gt;Master&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;
&lt;div&gt;192.168.100.40&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;
&lt;div&gt;&lt;span&gt;jh-slave1&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;
&lt;div&gt;49.50.161.52&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;
&lt;div&gt;192.168.100.37&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;
&lt;div&gt;Mysql 8.0.28&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;
&lt;div&gt;Slave&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;
&lt;div&gt;&lt;span&gt;jh-slave2&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;
&lt;div&gt;118.67.131.204&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;
&lt;div&gt;192.168.100.38&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;
&lt;div&gt;Mysql 8.0.28&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;
&lt;div&gt;Slave&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;
&lt;div&gt;&lt;span&gt;jh-slave3&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;
&lt;div&gt;27.96.131.176&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;
&lt;div&gt;192.168.100.39&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;
&lt;div&gt;Mysql 8.0.28&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;
&lt;div&gt;Slave&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;※ 사전 MySQL DB 설치 진행&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ my.cnf Config&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1659177360736&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;Master&amp;gt;
[root@jh-master ~]# vi /etc/my.cnf

[mysqld]
server-id=1

log-bin=/data/mariadb-bin
log-bin-index=/data/bin.index
expire-logs-days=7

relay-log=/data/relay-log
relay_log_purge=off
expire_logs_days=7

datadir=/data
socket=/tmp/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
log-error=/log/mariadb.log
pid-file=/log/mariadb.pid

[mysqld_safe]
log-error=/log/mariadb.log
pid-file=/log/mariadb.pid

#
# include all files from the config directory
#
!includedir /etc/my.cnf.d



&amp;lt;Slave1,2,3&amp;gt;
[mysqld]
server-id=2

log-bin=/data/mariadb-bin
log-bin-index=/data/bin.index
expire-logs-days=7

relay-log=/data/relay-log
relay_log_purge=off
expire_logs_days=7

read_only=1

datadir=/data
socket=/tmp/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
log-error=/log/mariadb.log
pid-file=/log/mariadb.pid

[mysqld_safe]
log-error=/log/mariadb.log
pid-file=/log/mariadb.pid

#
# include all files from the config directory
#
!includedir /etc/my.cnf.d



[mysqld]
server-id=3

log-bin=/data/mariadb-bin
log-bin-index=/data/bin.index
expire-logs-days=7

relay-log=/data/relay-log
relay_log_purge=off
expire_logs_days=7

read_only=1

datadir=/data
socket=/tmp/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
log-error=/log/mariadb.log
pid-file=/log/mariadb.pid

[mysqld_safe]
log-error=/log/mariadb.log
pid-file=/log/mariadb.pid

#
# include all files from the config directory
#
!includedir /etc/my.cnf.d




[mysqld]
server-id=4

log-bin=/data/mariadb-bin
log-bin-index=/data/bin.index
expire-logs-days=7

relay-log=/data/relay-log
relay_log_purge=off
expire_logs_days=7

read_only=1

datadir=/data
socket=/tmp/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
log-error=/log/mariadb.log
pid-file=/log/mariadb.pid

[mysqld_safe]
log-error=/log/mariadb.log
pid-file=/log/mariadb.pid

#
# include all files from the config directory
#
!includedir /etc/my.cnf.d&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ replication 유저 생성(모든 노드)&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1659177384313&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; create user repl@'%' identified WITH mysql_native_password by 'repl';
Query OK, 0 rows affected (0.01 sec)

mysql&amp;gt; grant replication slave,replication client on *.* to repl@'%';
Query OK, 0 rows affected (0.01 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;-master status(Master)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1659177399165&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; show master status;
+--------------------+----------+--------------+------------------+-------------------+
| File               | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+--------------------+----------+--------------+------------------+-------------------+
| mariadb-bin.000002 |     1030 |              |                  |                   |
+--------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;-Slave 등록 &amp;amp; 실행(Slave 1,2,3)&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1659177422587&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; CHANGE MASTER TO MASTER_HOST='192.168.100.36', MASTER_USER='repl',MASTER_PASSWORD='repl',MASTER_PORT=3306,MASTER_LOG_FILE='mariadb-bin.000002', MASTER_LOG_POS=1030,MASTER_CONNECT_RETRY=10;

mysql&amp;gt; start slave;&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;-Slave 상태 확인(Slave 1, 2, 3)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1659177452961&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for source to send event
                  Master_Host: 192.168.100.36
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 10
              Master_Log_File: mariadb-bin.000002
          Read_Master_Log_Pos: 1731
               Relay_Log_File: relay-log.000002
                Relay_Log_Pos: 1029
        Relay_Master_Log_File: mariadb-bin.000002
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 1731
              Relay_Log_Space: 1233
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 1
                  Master_UUID: 9dd71463-07d3-11ed-a6c4-f220cde1e464
             Master_Info_File: mysql.slave_master_info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Replica has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind:
      Last_IO_Error_Timestamp:
     Last_SQL_Error_Timestamp:
               Master_SSL_Crl:
           Master_SSL_Crlpath:
           Retrieved_Gtid_Set:
            Executed_Gtid_Set:
                Auto_Position: 0
         Replicate_Rewrite_DB:
                 Channel_Name:
           Master_TLS_Version:
       Master_public_key_path:
        Get_master_public_key: 0
            Network_Namespace:
1 row in set, 1 warning (0.01 sec)



mysql&amp;gt; show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for source to send event
                  Master_Host: 192.168.100.36
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 10
              Master_Log_File: mariadb-bin.000002
          Read_Master_Log_Pos: 1731
               Relay_Log_File: relay-log.000002
                Relay_Log_Pos: 1029
        Relay_Master_Log_File: mariadb-bin.000002
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 1731
              Relay_Log_Space: 1233
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 1
                  Master_UUID: 9dd71463-07d3-11ed-a6c4-f220cde1e464
             Master_Info_File: mysql.slave_master_info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Replica has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind:
      Last_IO_Error_Timestamp:
     Last_SQL_Error_Timestamp:
               Master_SSL_Crl:
           Master_SSL_Crlpath:
           Retrieved_Gtid_Set:
            Executed_Gtid_Set:
                Auto_Position: 0
         Replicate_Rewrite_DB:
                 Channel_Name:
           Master_TLS_Version:
       Master_public_key_path:
        Get_master_public_key: 0
            Network_Namespace:
1 row in set, 1 warning (0.00 sec)



mysql&amp;gt; show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for source to send event
                  Master_Host: 192.168.100.36
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 10
              Master_Log_File: mariadb-bin.000002
          Read_Master_Log_Pos: 1731
               Relay_Log_File: relay-log.000002
                Relay_Log_Pos: 1029
        Relay_Master_Log_File: mariadb-bin.000002
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 1731
              Relay_Log_Space: 1233
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 1
                  Master_UUID: 9dd71463-07d3-11ed-a6c4-f220cde1e464
             Master_Info_File: mysql.slave_master_info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Replica has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind:
      Last_IO_Error_Timestamp:
     Last_SQL_Error_Timestamp:
               Master_SSL_Crl:
           Master_SSL_Crlpath:
           Retrieved_Gtid_Set:
            Executed_Gtid_Set:
                Auto_Position: 0
         Replicate_Rewrite_DB:
                 Channel_Name:
           Master_TLS_Version:
       Master_public_key_path:
        Get_master_public_key: 0
            Network_Namespace:
1 row in set, 1 warning (0.00 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;-Master에서 Slave 조회&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1659177474304&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; show slave hosts\G;
*************************** 1. row ***************************
Server_id: 2
      Host:
      Port: 3306
Master_id: 1
Slave_UUID: aa511e17-07d3-11ed-aea9-f220cda626a6
*************************** 2. row ***************************
Server_id: 3
      Host:
      Port: 3306
Master_id: 1
Slave_UUID: 87cf362c-07e1-11ed-b7f8-f220cd646c8a
*************************** 3. row ***************************
Server_id: 4
      Host:
      Port: 3306
Master_id: 1
Slave_UUID: 9dd5ca74-07d3-11ed-a50d-f220cd8a1dd8


3 rows in set, 1 warning (0.00 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ VIP 생성(Master, Slave 1,2,3)&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;띄어 놓는건 Master에만 띄어놓습니다.&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1659177493083&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@jh-master ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth1:1

[root@jh-master ~]# /etc/sysconfig/network-scripts/ifup ifcfg-eth1:1

[root@jh-master ~]# ifconfig
eth0: flags=4163&amp;lt;UP,BROADCAST,RUNNING,MULTICAST&amp;gt;  mtu 1500
        inet 10.41.216.208  netmask 255.255.254.0  broadcast 10.41.217.255
        ether f2:20:cd:e1:e4:64  txqueuelen 1000  (Ethernet)
        RX packets 282998  bytes 1286099185 (1.1 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 188056  bytes 21221577 (20.2 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth1: flags=4163&amp;lt;UP,BROADCAST,RUNNING,MULTICAST&amp;gt;  mtu 1500
        inet 192.168.100.36  netmask 255.255.255.0  broadcast 192.168.100.255
        ether f2:d7:cf:cc:bb:f0  txqueuelen 1000  (Ethernet)
        RX packets 28340  bytes 1433805 (1.3 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2539  bytes 277764 (271.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth1:1: flags=4163&amp;lt;UP,BROADCAST,RUNNING,MULTICAST&amp;gt;  mtu 1500
        inet 192.168.100.40  netmask 255.255.255.0  broadcast 192.168.100.255
        ether f2:d7:cf:cc:bb:f0  txqueuelen 1000  (Ethernet)

lo: flags=73&amp;lt;UP,LOOPBACK,RUNNING&amp;gt;  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1  (Local Loopback)
        RX packets 12  bytes 1164 (1.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 12  bytes 1164 (1.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ MHA 필수 패키지 설치 (모든 노드)&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1659177515728&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@jh-master ~]# yum -y install epel*

[root@jh-master ~]# yum install -y epel perl-devel perl-CPAN perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Module-Install&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ SSh 설정(모든 노드)&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1659177536461&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@jh-master ~]# vi /etc/ssh/sshd_config
PermitRootLogin yes


[root@jh-master ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
d3:56:44:0e:4d:52:17:93:64:31:25:3c:6f:d9:72:52 root@jh-master
The key's randomart image is:
+--[ RSA 2048]----+
|          o==oX=.|
|           =.o++E|
|            o  +o|
|         . .  o.=|
|        S o    = |
|         o       |
|                 |
|                 |
|                 |
+-----------------+



[root@jh-master ~]# chmod 700 ~/.ssh
[root@jh-master ~]# chmod 600 ~/.ssh/id_rsa
[root@jh-master ~]# chmod 644 ~/.ssh/id_rsa.pub
[root@jh-master ~]# cat ~/.ssh/id_rsa.pub &amp;gt; ~/.ssh/authorized_keys
[root@jh-master ~]# chmod 644 ~/.ssh/authorized_keys


## 각 노드별 Public key 공유
[root@jh-mgr .ssh]# vi authorized_keys

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6/zs03al+j0Bf/i3IvtaqbA2or/4Rsb1VwB1LIHRSxDyVrYS+bQsiJBOA/qlOYiFMCSPUSQx3PWJNgeT/HqsEznUutpEqgnM/i7D3946w4X87laExWJ3veNd5No8WchX3ol8HxHaF5WH8mgXB7Sj+zoB5Xw2pDnjlCaCdZGc73OUYeW2shSm7eCgrCltLM0tEhUo72sbcJhvGEN/PvEpFsicHwLBy/UFbx4ZY3Ow5WYRi3VF4CI3pLOwcHmsR6eewh3a4IA4CLiy6G744ziyJvkZMVFs2zWOwxjlKeVudcM0k6axkzix4iAy+vOMy7ZzgtrVIcCrSqR5GFgfkzX9h root@jh-mgr

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDgv9r7c/inJus0WqGs/5u+EKZyPNSO+76Me2D4gTct+8in7ml6SaMQWGbS+JbquFnoTKXWRuZ703LNWC1koY2ATW+7IEWPh6VcA+FxCEB7oYDeUPm1zSVm9IypAKgq2NcUuzZJWMnpRuLwKm7F03iwC7EBwTdr05LXF+QRY1xaIoGFtH5GhWreCc2AcsCCUfuDtZp+25f4RTfv9CWjEHdU2Qd0hD57OOfU2OQ866LQgySn7XymU5zwl3wyQUVV6MSuGkaKcGpVhxR1KQfnvNr3FTjDh2XQMG4czEOaQ+6Sp9DeJTXA0kQp4O04X3NfIlgjPW0MZbyOxSgbzS6t1uL5 root@jh-master

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDifiOMYKLP787SFjSlCc8DLNkA34nZ+QrWsRXGpNgNhztxaCGtK4ru/8YuwgqjkODH8Gmwz0VVSsrNAhtw1ARv4Sd+oSKB6vX/fxkYPeI6fDqsP4E1gUNMtrjfj5sArQS1Qkmrp7ZipqGC2Ir3M4MGEzXBfLrEZku3hCxtXz8m7pXGVpTzOvfZU+Zkizad21eqnUUpkmsklqNxZrRGcikvqJhs8g/qTowFK7/m+JsYt8U1llojtUnJLgfO6UVbUaOllvcEpBwZk5CqK/7XiVgxTNJc4HmCb1w9BRndUIouC+qkDrclTYxYh6t9UOO7z2W3dOXDkAwTYKYHfyKRj1wR root@jh-slave1

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCyWG0YbJ/QQVnsuxyV4PHxodINTrJodem9MNbhNyJQYiYdAavnWBMO1D60+eeIi0fUX9UA+Ptsg6b1mlRy9wIaY1K1KqZieqAMR3HH4qg9fc+JQJzuAbXgeWGBnbqzfrMgD1PrIND3jhBxgrV4h+vMXSBdwBZ6QKCOOKqSygJk03PmB6vXG+HunQ27BE1xUMft7AP6fdw5kX4LgM9AmYuAJ+Wc5bN+twaV8fWWjR4PLLGpgqCnNidPyohIoiccd3tdftuZfm2nshpNZAcwvX/1m0zJ+vYSh1F5w2dSiXSFyUpNExIfqzkJ7msIEC3TdVkO6YvnPb1ETvarOtRtdhkv root@jh-slave2

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC8zRiaVvzWiLKMqlaTokDUbPZDN5IUWjIYSpnvPqtLFmluXnl9A6qVMaLS82BQHnAJmiNKBNGFkdZFPcEvrPl1vm4H8SoPs8xvDVSXMQp90DZaIAu+vwiVJlwClaO5QKj88CbFiRn33mJxLJ3chjxGhDsflOQybGd2xA1+LG6sp5GCZVm09IRfmveSrtGFF6oOAwARyP0Tus0Z+JvKXtwH/GYBwnEUcke406JO+2RY0Nv571bAcBssyS7T5c/tzlzluX6c2YL7Ie7PmGpoZrOaCTXcu+m/y8E50aI0VGTRS9dxJLMWI4u4uRKSloViFMbQpgZG65OwZ1UVqy5CUuB3 root@jh-slave3


[root@jh-mgr .ssh]# systemctl restart sshd


## 패스워드 없이 접속 가능 여부 확인
[root@jh-mgr ~]# ssh 192.168.100.36
[root@jh-mgr ~]# ssh 192.168.100.37
[root@jh-mgr ~]# ssh 192.168.100.38
[root@jh-mgr ~]# ssh 192.168.100.39&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■&amp;nbsp;&lt;/span&gt;&lt;span&gt;mha4mysql-node 컴파일 &amp;amp; 인스톨 (모든서버)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1659177574882&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@jh-mgr ~]# tar -zxvf mha4mysql-node-0.57.tar.gz
[root@jh-mgr ~]# cd mha4mysql-node-0.57/

[root@jh-mgr mha4mysql-node-0.57]# perl Makefile.PL
[root@jh-mgr mha4mysql-node-0.57]# make &amp;amp;&amp;amp; make install&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■&amp;nbsp;&lt;/span&gt;&lt;span&gt;mha4mysql-manager 컴파일 &amp;amp; 인스톨 (Manager)&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1659177590693&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@jh-mgr ~]# tar -zxvf mha4mysql-manager-0.57.tar.gz


[root@jh-mgr ~]# cd mha4mysql-manager-0.57/


[root@jh-mgr mha4mysql-manager-0.57]# cpan YAML

[root@jh-mgr mha4mysql-manager-0.57]# perl -MCPAN -e &quot;install File::Remove&quot;

[root@jh-mgr mha4mysql-manager-0.57]# perl -MCPAN -e &quot;install Build&quot;

[root@jh-mgr mha4mysql-manager-0.57]# perl -MCPAN -e &quot;install Module::Install&quot;

[root@jh-mgr mha4mysql-manager-0.57]# perl -MCPAN -e &quot;install Net::Telnet&quot;

[root@jh-mgr mha4mysql-manager-0.57]# perl -MCPAN -e &quot;install Log::Dispatch&quot;

[root@jh-mgr mha4mysql-manager-0.57]# perl Makefile.PL

[root@jh-mgr mha4mysql-manager-0.57]# make &amp;amp;&amp;amp; make install&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■&amp;nbsp;&lt;/span&gt;&lt;span&gt;MHA Configure (Manager)&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1659177623890&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@jh-mgr ~]#  vi ~/.bash_profile

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH

alias sshcheck='/usr/local/bin/masterha_check_ssh --conf=/etc/mha.cnf'

alias replcheck='/usr/local/bin/masterha_check_repl --conf=/etc/mha.cnf'

alias start='/usr/local/bin/masterha_manager --conf=/etc/mha.cnf &amp;amp;'

alias stop='/usr/local/bin/masterha_stop --conf=/etc/mha.cnf'

alias status='/usr/local/bin/masterha_check_status --conf=/etc/mha.cnf'

alias log='tail -f /var/log/masterha/app1/app1.log'




[root@jh-mgr ~]# cp /root/mha4mysql-manager-0.57/samples/conf/app1.cnf  /etc/mha.cnf

[root@jh-mgr ~]# mkdir /mha


[root@jh-mgr ~]# vi /etc/mha.cnf

[server default]
user=repl
password=repl
ssh_user=root


# working directory on the manager
manager_workdir=/var/log/masterha/app1


# manager log file
manager_log=/var/log/masterha/app1/app1.log


# working directory on MySQL servers
remote_workdir=/var/log/masterha/app5


repl_user=repl
repl_password=repl


master_binlog_dir=/data

#ping interval, 3 times trial
ping_interval=5


#custom scripts for master ip failover
master_ip_failover_script=/var/log/masterha/app1/custom_scripts/master_ip_failover


#custom scripts for shutdown using fencing network custom script
#shutdown_script=/var/log/masterha/app1/custom_scripts/power_manager


#custom scripts for manual master switch
master_ip_online_change_script=/var/log/masterha/app1/custom_scripts/master_ip_online_change


[server1]
hostname=192.168.100.36
port=3306
ignore_fail=1


[server2]
hostname=192.168.100.37
port=3306
ignore_fail=1


[server3]
hostname=192.168.100.38
port=3306
ignore_fail=1


[server4]
hostname=192.168.100.39
port=3306
ignore_fail=1



[root@jh-mgr ~]# mkdir -p /var/log/masterha/app1/custom_scripts
[root@jh-mgr ~]# mkdir /var/log/masterha/app5&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ sshcheck&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1659177644767&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@jh-mgr ~]# sshcheck
Wed Jul 20 14:25:52 2022 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
Wed Jul 20 14:25:52 2022 - [info] Reading application default configuration from /etc/mha.cnf..
Wed Jul 20 14:25:52 2022 - [info] Reading server configuration from /etc/mha.cnf..
Wed Jul 20 14:25:52 2022 - [info] Starting SSH connection tests..
Wed Jul 20 14:25:53 2022 - [debug]
Wed Jul 20 14:25:52 2022 - [debug]  Connecting via SSH from root@192.168.100.36(192.168.100.36:22) to root@192.168.100.37(192.168.100.37:22)..
Warning: Permanently added '192.168.100.37' (ECDSA) to the list of known hosts.
Wed Jul 20 14:25:53 2022 - [debug]   ok.
Wed Jul 20 14:25:53 2022 - [debug]  Connecting via SSH from root@192.168.100.36(192.168.100.36:22) to root@192.168.100.38(192.168.100.38:22)..
Warning: Permanently added '192.168.100.38' (ECDSA) to the list of known hosts.
Wed Jul 20 14:25:53 2022 - [debug]   ok.
Wed Jul 20 14:25:53 2022 - [debug]  Connecting via SSH from root@192.168.100.36(192.168.100.36:22) to root@192.168.100.39(192.168.100.39:22)..
Warning: Permanently added '192.168.100.39' (ECDSA) to the list of known hosts.
Wed Jul 20 14:25:53 2022 - [debug]   ok.
Wed Jul 20 14:25:54 2022 - [debug]
Wed Jul 20 14:25:53 2022 - [debug]  Connecting via SSH from root@192.168.100.37(192.168.100.37:22) to root@192.168.100.36(192.168.100.36:22)..
Warning: Permanently added '192.168.100.36' (ECDSA) to the list of known hosts.
Wed Jul 20 14:25:53 2022 - [debug]   ok.
Wed Jul 20 14:25:53 2022 - [debug]  Connecting via SSH from root@192.168.100.37(192.168.100.37:22) to root@192.168.100.38(192.168.100.38:22)..
Warning: Permanently added '192.168.100.38' (ECDSA) to the list of known hosts.
Wed Jul 20 14:25:53 2022 - [debug]   ok.
Wed Jul 20 14:25:53 2022 - [debug]  Connecting via SSH from root@192.168.100.37(192.168.100.37:22) to root@192.168.100.39(192.168.100.39:22)..
Warning: Permanently added '192.168.100.39' (ECDSA) to the list of known hosts.
Wed Jul 20 14:25:54 2022 - [debug]   ok.
Wed Jul 20 14:25:54 2022 - [debug]
Wed Jul 20 14:25:53 2022 - [debug]  Connecting via SSH from root@192.168.100.38(192.168.100.38:22) to root@192.168.100.36(192.168.100.36:22)..
Warning: Permanently added '192.168.100.38' (ECDSA) to the list of known hosts.
Warning: Permanently added '192.168.100.36' (ECDSA) to the list of known hosts.
Wed Jul 20 14:25:54 2022 - [debug]   ok.
Wed Jul 20 14:25:54 2022 - [debug]  Connecting via SSH from root@192.168.100.38(192.168.100.38:22) to root@192.168.100.37(192.168.100.37:22)..
Warning: Permanently added '192.168.100.37' (ECDSA) to the list of known hosts.
Wed Jul 20 14:25:54 2022 - [debug]   ok.
Wed Jul 20 14:25:54 2022 - [debug]  Connecting via SSH from root@192.168.100.38(192.168.100.38:22) to root@192.168.100.39(192.168.100.39:22)..
Warning: Permanently added '192.168.100.39' (ECDSA) to the list of known hosts.
Wed Jul 20 14:25:54 2022 - [debug]   ok.
Wed Jul 20 14:25:55 2022 - [debug]
Wed Jul 20 14:25:54 2022 - [debug]  Connecting via SSH from root@192.168.100.39(192.168.100.39:22) to root@192.168.100.36(192.168.100.36:22)..
Warning: Permanently added '192.168.100.39' (ECDSA) to the list of known hosts.
Warning: Permanently added '192.168.100.36' (ECDSA) to the list of known hosts.
Wed Jul 20 14:25:54 2022 - [debug]   ok.
Wed Jul 20 14:25:54 2022 - [debug]  Connecting via SSH from root@192.168.100.39(192.168.100.39:22) to root@192.168.100.37(192.168.100.37:22)..
Warning: Permanently added '192.168.100.37' (ECDSA) to the list of known hosts.
Wed Jul 20 14:25:54 2022 - [debug]   ok.
Wed Jul 20 14:25:54 2022 - [debug]  Connecting via SSH from root@192.168.100.39(192.168.100.39:22) to root@192.168.100.38(192.168.100.38:22)..
Warning: Permanently added '192.168.100.38' (ECDSA) to the list of known hosts.
Wed Jul 20 14:25:54 2022 - [debug]   ok.
Wed Jul 20 14:25:55 2022 - [info] All SSH connection tests passed successfully.
Use of uninitialized value in exit at /usr/local/bin/masterha_check_ssh line 44.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;■ 심볼릭 링크 생성(Master, Slave 1,2,3)&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1659177664513&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@jh-master ~]# ln -s /mysql/bin/mysqlbinlog  /usr/bin/mysqlbinlog
[root@jh-master ~]# ln -s /mysql/bin/mysql /usr/bin/mysql&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;■ replcheck&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1659177685014&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@jh-mgr ~]# replcheck
Wed Jul 20 14:39:28 2022 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
Wed Jul 20 14:39:28 2022 - [info] Reading application default configuration from /etc/mha.cnf..
Wed Jul 20 14:39:28 2022 - [info] Reading server configuration from /etc/mha.cnf..
Wed Jul 20 14:39:28 2022 - [info] MHA::MasterMonitor version 0.57.
Wed Jul 20 14:39:29 2022 - [info] GTID failover mode = 0
Wed Jul 20 14:39:29 2022 - [info] Dead Servers:
Wed Jul 20 14:39:29 2022 - [info] Alive Servers:
Wed Jul 20 14:39:29 2022 - [info]   192.168.100.36(192.168.100.36:3306)
Wed Jul 20 14:39:29 2022 - [info]   192.168.100.37(192.168.100.37:3306)
Wed Jul 20 14:39:29 2022 - [info]   192.168.100.38(192.168.100.38:3306)
Wed Jul 20 14:39:29 2022 - [info]   192.168.100.39(192.168.100.39:3306)
Wed Jul 20 14:39:29 2022 - [info] Alive Slaves:
Wed Jul 20 14:39:29 2022 - [info]   192.168.100.37(192.168.100.37:3306)  Version=8.0.28 (oldest major version between slaves) log-bin:enabled
Wed Jul 20 14:39:29 2022 - [info]     Replicating from 192.168.100.36(192.168.100.36:3306)
Wed Jul 20 14:39:29 2022 - [info]   192.168.100.38(192.168.100.38:3306)  Version=8.0.28 (oldest major version between slaves) log-bin:enabled
Wed Jul 20 14:39:29 2022 - [info]     Replicating from 192.168.100.36(192.168.100.36:3306)
Wed Jul 20 14:39:29 2022 - [info]   192.168.100.39(192.168.100.39:3306)  Version=8.0.28 (oldest major version between slaves) log-bin:enabled
Wed Jul 20 14:39:29 2022 - [info]     Replicating from 192.168.100.36(192.168.100.36:3306)
Wed Jul 20 14:39:29 2022 - [info] Current Alive Master: 192.168.100.36(192.168.100.36:3306)
Wed Jul 20 14:39:29 2022 - [info] Checking slave configurations..
Wed Jul 20 14:39:29 2022 - [info]  read_only=1 is not set on slave 192.168.100.37(192.168.100.37:3306).
Wed Jul 20 14:39:29 2022 - [info]  read_only=1 is not set on slave 192.168.100.38(192.168.100.38:3306).
Wed Jul 20 14:39:29 2022 - [info]  read_only=1 is not set on slave 192.168.100.39(192.168.100.39:3306).
Wed Jul 20 14:39:29 2022 - [info] Checking replication filtering settings..
Wed Jul 20 14:39:29 2022 - [info]  binlog_do_db= , binlog_ignore_db=
Wed Jul 20 14:39:29 2022 - [info]  Replication filtering check ok.
Wed Jul 20 14:39:29 2022 - [info] GTID (with auto-pos) is not supported
Wed Jul 20 14:39:29 2022 - [info] Starting SSH connection tests..
Wed Jul 20 14:39:32 2022 - [info] All SSH connection tests passed successfully.
Wed Jul 20 14:39:32 2022 - [info] Checking MHA Node version..
Wed Jul 20 14:39:32 2022 - [info]  Version check ok.
Wed Jul 20 14:39:32 2022 - [info] Checking SSH publickey authentication settings on the current master..
Wed Jul 20 14:39:32 2022 - [info] HealthCheck: SSH to 192.168.100.36 is reachable.
Wed Jul 20 14:39:32 2022 - [info] Master MHA Node version is 0.57.
Wed Jul 20 14:39:32 2022 - [info] Checking recovery script configurations on 192.168.100.36(192.168.100.36:3306)..
Wed Jul 20 14:39:32 2022 - [info]   Executing command: save_binary_logs --command=test --start_pos=4 --binlog_dir=/data --output_file=/var/log/masterha/app5/save_binary_logs_test --manager_version=0.57 --start_file=mariadb-bin.000002
Wed Jul 20 14:39:32 2022 - [info]   Connecting to root@192.168.100.36(192.168.100.36:22)..
  Creating /var/log/masterha/app5 if not exists..    ok.
  Checking output directory is accessible or not..
   ok.
  Binlog found at /data, up to mariadb-bin.000002
Wed Jul 20 14:39:33 2022 - [info] Binlog setting check done.
Wed Jul 20 14:39:33 2022 - [info] Checking SSH publickey authentication and checking recovery script configurations on all alive slave servers..
Wed Jul 20 14:39:33 2022 - [info]   Executing command : apply_diff_relay_logs --command=test --slave_user='repl' --slave_host=192.168.100.37 --slave_ip=192.168.100.37 --slave_port=3306 --workdir=/var/log/masterha/app5 --target_version=8.0.28 --manager_version=0.57 --relay_dir=/data --current_relay_log=relay-log.000002  --slave_pass=xxx
Wed Jul 20 14:39:33 2022 - [info]   Connecting to root@192.168.100.37(192.168.100.37:22)..
  Checking slave recovery environment settings..
    Relay log found at /data, up to relay-log.000002
    Temporary relay log file is /data/relay-log.000002
    Testing mysql connection and privileges..mysql: [Warning] Using a password on the command line interface can be insecure.
done.
    Testing mysqlbinlog output.. done.
    Cleaning up test file(s).. done.
Wed Jul 20 14:39:33 2022 - [info]   Executing command : apply_diff_relay_logs --command=test --slave_user='repl' --slave_host=192.168.100.38 --slave_ip=192.168.100.38 --slave_port=3306 --workdir=/var/log/masterha/app5 --target_version=8.0.28 --manager_version=0.57 --relay_dir=/data --current_relay_log=relay-log.000002  --slave_pass=xxx
Wed Jul 20 14:39:33 2022 - [info]   Connecting to root@192.168.100.38(192.168.100.38:22)..
  Checking slave recovery environment settings..
    Relay log found at /data, up to relay-log.000002
    Temporary relay log file is /data/relay-log.000002
    Testing mysql connection and privileges..mysql: [Warning] Using a password on the command line interface can be insecure.
done.
    Testing mysqlbinlog output.. done.
    Cleaning up test file(s).. done.
Wed Jul 20 14:39:33 2022 - [info]   Executing command : apply_diff_relay_logs --command=test --slave_user='repl' --slave_host=192.168.100.39 --slave_ip=192.168.100.39 --slave_port=3306 --workdir=/var/log/masterha/app5 --target_version=8.0.28 --manager_version=0.57 --relay_dir=/data --current_relay_log=relay-log.000002  --slave_pass=xxx
Wed Jul 20 14:39:33 2022 - [info]   Connecting to root@192.168.100.39(192.168.100.39:22)..
  Checking slave recovery environment settings..
    Relay log found at /data, up to relay-log.000002
    Temporary relay log file is /data/relay-log.000002
    Testing mysql connection and privileges..mysql: [Warning] Using a password on the command line interface can be insecure.
done.
    Testing mysqlbinlog output.. done.
    Cleaning up test file(s).. done.
Wed Jul 20 14:39:33 2022 - [info] Slaves settings check done.
Wed Jul 20 14:39:33 2022 - [info]
192.168.100.36(192.168.100.36:3306) (current master)
+--192.168.100.37(192.168.100.37:3306)
+--192.168.100.38(192.168.100.38:3306)
+--192.168.100.39(192.168.100.39:3306)

Wed Jul 20 14:39:33 2022 - [info] Checking replication health on 192.168.100.37..
Wed Jul 20 14:39:33 2022 - [info]  ok.
Wed Jul 20 14:39:33 2022 - [info] Checking replication health on 192.168.100.38..
Wed Jul 20 14:39:33 2022 - [info]  ok.
Wed Jul 20 14:39:33 2022 - [info] Checking replication health on 192.168.100.39..
Wed Jul 20 14:39:33 2022 - [info]  ok.
Wed Jul 20 14:39:33 2022 - [warning] master_ip_failover_script is not defined.
Wed Jul 20 14:39:33 2022 - [warning] shutdown_script is not defined.
Wed Jul 20 14:39:33 2022 - [info] Got exit code 0 (Not master dead).

MySQL Replication Health is OK.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;part 2에서 이어서 스크립트 수정 후 테스트 진행하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;참고 &amp;amp; 사진 출처&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://hoing.io/archives/9175&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://hoing.io/archives/9175&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1659177869780&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;MySQL MHA(Master High Availability) 1 - MHA 기능 설명 및 아키텍처 설명&quot; data-og-description=&quot; &quot; data-og-host=&quot;hoing.io&quot; data-og-source-url=&quot;https://hoing.io/archives/9175&quot; data-og-url=&quot;https://hoing.io/archives/9175&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/sXj2L/hyPf0ijP4z/2tBRd727V4OcxuKniejYG1/img.png?width=535&amp;amp;height=408&amp;amp;face=0_0_535_408,https://scrap.kakaocdn.net/dn/cC1FG3/hyPf12A30r/scVNg2nBDCUevUHvpPJW40/img.png?width=535&amp;amp;height=408&amp;amp;face=0_0_535_408,https://scrap.kakaocdn.net/dn/o3BGt/hyPf3szpCE/JVp5VoCBkGDz4kSm7H0In1/img.png?width=759&amp;amp;height=500&amp;amp;face=0_0_759_500&quot;&gt;&lt;a href=&quot;https://hoing.io/archives/9175&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://hoing.io/archives/9175&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/sXj2L/hyPf0ijP4z/2tBRd727V4OcxuKniejYG1/img.png?width=535&amp;amp;height=408&amp;amp;face=0_0_535_408,https://scrap.kakaocdn.net/dn/cC1FG3/hyPf12A30r/scVNg2nBDCUevUHvpPJW40/img.png?width=535&amp;amp;height=408&amp;amp;face=0_0_535_408,https://scrap.kakaocdn.net/dn/o3BGt/hyPf3szpCE/JVp5VoCBkGDz4kSm7H0In1/img.png?width=759&amp;amp;height=500&amp;amp;face=0_0_759_500');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;MySQL MHA(Master High Availability) 1 - MHA 기능 설명 및 아키텍처 설명&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hoing.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>DataBase/MySQL &amp;amp; MariaDB</category>
      <category>4nodes</category>
      <category>mha</category>
      <category>mysql</category>
      <author>jeonghyun</author>
      <guid isPermaLink="true">https://jhdatabase.tistory.com/101</guid>
      <comments>https://jhdatabase.tistory.com/entry/MySQL-4node-MHA-%EA%B5%AC%EC%B6%95-part-1#entry101comment</comments>
      <pubDate>Sat, 30 Jul 2022 19:45:55 +0900</pubDate>
    </item>
    <item>
      <title>[MariaDB - Maxscale GUI 구성]</title>
      <link>https://jhdatabase.tistory.com/entry/MariaDB-Maxscale-GUI-%EA%B5%AC%EC%B6%95</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;MaxScale은 MariaDB 에서 지원하는 DB Proxy 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HA proxy 와 동일하나 DB read/ write 쿼리를 지정한 DB 서버로 &amp;nbsp;나눠주는 기능이 있는 등 DB에 더 특화되어있습니다.&lt;br /&gt;read / write 분산이 필요한 아키텍처에서 MaxScale 을 사용하면 효율적으로 분산 구조를 구성할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 포스팅에서는 Maxscale을 GUI로 구축하여 웹에서 통제 해보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;테스트 환경&lt;/b&gt;&lt;/blockquote&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;b&gt;Hostname&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;b&gt;IP&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;server1&amp;nbsp; &amp;nbsp;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;192.168.100.23&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;server2&amp;nbsp; &amp;nbsp;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;192.168.100.20&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;maxscale&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;49.50.163.26(public IP)&amp;nbsp; ,&amp;nbsp;192.168.100.21&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;■&lt;/span&gt; &amp;nbsp;&lt;span&gt;&lt;span&gt;필수 패키지 설치&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1659175460701&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@jeong ~]# yum -y install libcurl libaio openssl gnutls libatomic&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;■&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;span&gt;maxscale 설치&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1659175537177&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@jeong ~]# wget https://downloads.mariadb.com/MaxScale/2.5.0/centos/7/x86_64/maxscale-2.5.0.centos.7.tar.gz
--2022-03-21 15:40:35--  https://downloads.mariadb.com/MaxScale/2.5.0/centos/7/x86_64/maxscale-2.5.0.centos.7.tar.gz
Resolving downloads.mariadb.com (downloads.mariadb.com)... 104.18.135.24, 104.17.191.14, 2606:4700::6811:bf0e, ...
Connecting to downloads.mariadb.com (downloads.mariadb.com)|104.18.135.24|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 60848706 (58M) [application/octet-stream]
Saving to: &amp;lsquo;maxscale-2.5.0.centos.7.tar.gz&amp;rsquo;

100%[===================================================&amp;gt;] 60,848,706   183MB/s   in 0.3s   

2022-03-21 15:40:36 (183 MB/s) - &amp;lsquo;maxscale-2.5.0.centos.7.tar.gz&amp;rsquo; saved [60848706/60848706]



[root@jeong ~]# tar -zxvf maxscale-2.5.0.centos.7.tar.gz
maxscale-2.5.0.centos.7/share/
maxscale-2.5.0.centos.7/share/maxscale/
maxscale-2.5.0.centos.7/share/maxscale/Changelog.txt
maxscale-2.5.0.centos.7/share/maxscale/ReleaseNotes.txt
maxscale-2.5.0.centos.7/share/maxscale/UpgradingToMaxScale12.txt
maxscale-2.5.0.centos.7/share/maxscale/maxscale.cnf.template
...생략


[root@jeong ~]# mv maxscale-2.5.0.centos.7 /maxscale&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;■ &lt;/span&gt;&lt;span&gt;&lt;span&gt;config 수정&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1659175600273&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@jeong etc]# cp /maxscale/etc/maxscale.cnf.template  maxscale.cnf

[root@jeong etc]# vi /maxscale/etc/maxscale.cnf
# MaxScale documentation:
# https://mariadb.com/kb/en/mariadb-maxscale-24/

# Global parameters
#
# Complete list of configuration options:
# https://mariadb.com/kb/en/mariadb-maxscale-24-mariadb-maxscale-configuration-guide/

[maxscale]
threads=auto
admin_host            = 0.0.0.0
admin_port            = 8989
admin_ssl_key=/etc/certs/server-key.pem
admin_ssl_cert=/etc/certs/server-cert.pem
admin_ssl_ca_cert=/etc/certs/ca-cert.pem


# Server definitions
#
# Set the address of the server to the network
# address of a MariaDB server.
#


[server1]
type=server
address=192.168.100.23
port=3306
protocol=MariaDBBackend

[server2]
type=server
address=192.168.100.20
port=3306
protocol=MariaDBBackend


[Galera-Monitor]
type=monitor
module=galeramon
servers=server1, server2
user=maxscale
password=1
monitor_interval=2000ms

[Splitter-Service]
type=service
router=readwritesplit
servers=server1,server2
user=maxscale
password=1

[Splitter-Listener]
type=listener
service=Splitter-Service
protocol=MariaDBClient
port=3306

# Monitor for the servers
#
# This will keep MaxScale aware of the state of the servers.
# MariaDB Monitor documentation:
# https://mariadb.com/kb/en/mariadb-maxscale-24-mariadb-monitor/


# Service definitions
#
# Service Definition for a read-only service and
# a read/write splitting service.
#

# ReadConnRoute documentation:&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;■ &lt;/span&gt;maxscale 기동&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1659175637137&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@jeong etc]# groupadd maxscale
[root@jeong etc]# useradd -g maxscale maxscale
[root@jeong etc]# chown -R maxscale.maxscale /maxscale

[root@jeong etc]# /maxscale/bin/maxscale --basedir=/maxscale --user=maxscale&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;■&lt;span&gt; &lt;span&gt;&lt;span&gt;maxscale Rest API 사용을 위한 자체 서명 인증서(SSC)생성&lt;/span&gt;&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1659175740684&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;## 인증자의  인증서와  키  생성  :
mkdir /etc/certs 
cd /etc/certs/


[root@jeong certs]# openssl genrsa 2048 &amp;gt; ca-key.pem
Generating RSA private key, 2048 bit long modulus
..............................................................................................................................................+++
..................................+++
e is 65537 (0x10001)


[root@jeong certs]# openssl req -new -x509 -nodes -days 365000 -key ca-key.pem -out ca-cert.pem
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:ca.localhost
string is too long, it needs to be less than  2 bytes long
Country Name (2 letter code) [XX]:korea
string is too long, it needs to be less than  2 bytes long
Country Name (2 letter code) [XX]:ca
State or Province Name (full name) []:localhost
Locality Name (eg, city) [Default City]:seoul
Organization Name (eg, company) [Default Company Ltd]:goodus
Organizational Unit Name (eg, section) []:kim
Common Name (eg, your name or your server's hostname) []:maxscale
Email Address []:gkdlwpdwl@gmail.com



## MaxScale 인증서  생성:
[root@jeong certs]# openssl req -newkey rsa:2048 -nodes -days 365000    -keyout server-key.pem    -out server-req.pem
Generating a 2048 bit RSA private key
.........+++
.......................+++
writing new private key to 'server-key.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:korea
string is too long, it needs to be less than  2 bytes long
Country Name (2 letter code) [XX]:ko
State or Province Name (full name) []:korea
Locality Name (eg, city) [Default City]:seoul
Organization Name (eg, company) [Default Company Ltd]:goodus
Organizational Unit Name (eg, section) []:kim
Common Name (eg, your name or your server's hostname) []:maxscale
Email Address []:goosdus@gmail.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:goodus
An optional company name []:goodus


[root@jeong certs]# CN=localhost


[root@jeong certs]# openssl x509 -req -days 365000 -set_serial 01 -in server-req.pem -out server-cert.pem -CA ca-cert.pem -CAkey ca-key.pem
Signature ok
subject=/C=ko/ST=korea/L=seoul/O=goodus/OU=kim/CN=maxscale/emailAddress=goosdus@gmail.com
Getting CA Private Key


## 클라이언트  인증서  생성:
[root@jeong certs]# openssl req -newkey rsa:2048 -nodes -days 365000    -keyout client-key.pem    -out client-req.pem
Generating a 2048 bit RSA private key
........+++
..................................................................+++
writing new private key to 'client-key.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:ko
State or Province Name (full name) []:korea
Locality Name (eg, city) [Default City]:seoul
Organization Name (eg, company) [Default Company Ltd]:goodusd
Organizational Unit Name (eg, section) []:kim
Common Name (eg, your name or your server's hostname) []:maxscale
Email Address []:goodus@gmail.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:goodus
An optional company name []:goodus


[root@jeong certs]# CN=client.localhost

openssl x509 -req -days 365000 -set_serial 01   -in client-req.pem    -out client-cert.pem    -CA ca-cert.pem    - CAkey ca-key.pem



## 생성된  인증서  검증:
[root@jeong certs]# openssl verify -CAfile ca-cert.pem    ca-cert.pem    server-cert.pem
ca-cert.pem: OK
server-cert.pem: OK


openssl verify -CAfile ca-cert.pem  ca-cert.pem  client-cert.pem


## 새  인증서  적용  및  사용:
chmod +r server-key.pem 
systemctl restart maxscale&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;■&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;Maxscale GUI 관리자 생성&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1659175778600&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;MaxGUI에 접근하기 위한 사용자 계정을 만듭니다.
[root@jeong ~]# maxctrl --secure --hosts=maxscale1.example.comserver124.labs.mydomain.com:8989 --tls-key=/etc/certs/client-key.pem --tls-cert=/etc/certs/client-cert.pem --tls-ca-cert=/etc/certs/ca-cert.pem create user &quot;maxscale_rest_admin&quot; &quot;PASSWORD&quot; --type=admin


[root@jeong ~]# maxctrl --secure --hosts=maxscale1.example.comserver124.labs.mydomain.com:8989 --tls-key=/etc/certs/client-key.pem --tls-cert=/etc/certs/client-cert.pem --tls-ca-cert=/etc/certs/ca-cert.pem list servers
┌─────────┬────────────────┬──────┬─────────────┬─────────┬──────┐
│ Server  │ Address        │ Port │ Connections │ State   │ GTID │
├─────────┼────────────────┼──────┼─────────────┼─────────┼──────┤
│ server1 │ 192.168.100.23 │ 3306 │ 0           │ Running │      │
├─────────┼────────────────┼──────┼─────────────┼─────────┼──────┤
│ server2 │ 192.168.100.20 │ 3306 │ 0           │ Running │      │
└─────────┴────────────────┴──────┴─────────────┴─────────┴──────┘&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;■&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;https://(도메인or ip):8989&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;admin user 생성할때 만든 id, pw 입력&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1028&quot; data-origin-height=&quot;713&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c1cKqi/btrIvSfo0Ls/bJx2jd65WUVD28LDxZ50J0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c1cKqi/btrIvSfo0Ls/bJx2jd65WUVD28LDxZ50J0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c1cKqi/btrIvSfo0Ls/bJx2jd65WUVD28LDxZ50J0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc1cKqi%2FbtrIvSfo0Ls%2FbJx2jd65WUVD28LDxZ50J0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1028&quot; height=&quot;713&quot; data-origin-width=&quot;1028&quot; data-origin-height=&quot;713&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1910&quot; data-origin-height=&quot;727&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b08hSo/btrIx0w09ZC/FZJhhkQHWqH189NZAZJKO0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b08hSo/btrIx0w09ZC/FZJhhkQHWqH189NZAZJKO0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b08hSo/btrIx0w09ZC/FZJhhkQHWqH189NZAZJKO0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb08hSo%2FbtrIx0w09ZC%2FFZJhhkQHWqH189NZAZJKO0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1910&quot; height=&quot;727&quot; data-origin-width=&quot;1910&quot; data-origin-height=&quot;727&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;■&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;parameter 설정&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1473&quot; data-origin-height=&quot;1255&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bXiiTc/btrIAEGhIZF/QIJs7ear0BCmR4dMlgOmd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bXiiTc/btrIAEGhIZF/QIJs7ear0BCmR4dMlgOmd0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bXiiTc/btrIAEGhIZF/QIJs7ear0BCmR4dMlgOmd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbXiiTc%2FbtrIAEGhIZF%2FQIJs7ear0BCmR4dMlgOmd0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1473&quot; height=&quot;1255&quot; data-origin-width=&quot;1473&quot; data-origin-height=&quot;1255&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1519&quot; data-origin-height=&quot;1258&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5Muhe/btrIwGy07PM/6FrlHI83c1lP7UDCK9wCa0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5Muhe/btrIwGy07PM/6FrlHI83c1lP7UDCK9wCa0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5Muhe/btrIwGy07PM/6FrlHI83c1lP7UDCK9wCa0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5Muhe%2FbtrIwGy07PM%2F6FrlHI83c1lP7UDCK9wCa0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1519&quot; height=&quot;1258&quot; data-origin-width=&quot;1519&quot; data-origin-height=&quot;1258&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1472&quot; data-origin-height=&quot;372&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Kxm2Z/btrIx0DOokn/zTlOWjqkC61Zg8VGJNFAk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Kxm2Z/btrIx0DOokn/zTlOWjqkC61Zg8VGJNFAk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Kxm2Z/btrIx0DOokn/zTlOWjqkC61Zg8VGJNFAk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKxm2Z%2FbtrIx0DOokn%2FzTlOWjqkC61Zg8VGJNFAk0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1472&quot; height=&quot;372&quot; data-origin-width=&quot;1472&quot; data-origin-height=&quot;372&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;■ &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;span&gt;server1 설정&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2042&quot; data-origin-height=&quot;893&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pABs9/btrIzFeBOqf/zUzfRSwtWl3jUlbycGWwh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pABs9/btrIzFeBOqf/zUzfRSwtWl3jUlbycGWwh0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pABs9/btrIzFeBOqf/zUzfRSwtWl3jUlbycGWwh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpABs9%2FbtrIzFeBOqf%2FzUzfRSwtWl3jUlbycGWwh0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2042&quot; height=&quot;893&quot; data-origin-width=&quot;2042&quot; data-origin-height=&quot;893&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;■&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;span&gt;server2 설정&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2058&quot; data-origin-height=&quot;862&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TrVXG/btrIxZroGh7/JIDtnif9u1apP4LVBOunhk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TrVXG/btrIxZroGh7/JIDtnif9u1apP4LVBOunhk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TrVXG/btrIxZroGh7/JIDtnif9u1apP4LVBOunhk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTrVXG%2FbtrIxZroGh7%2FJIDtnif9u1apP4LVBOunhk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2058&quot; height=&quot;862&quot; data-origin-width=&quot;2058&quot; data-origin-height=&quot;862&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;■ &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;status가 Running상태 확인&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2100&quot; data-origin-height=&quot;554&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5OJmG/btrIy0cfkDU/gzbWsI5VlgyzQM4lZkkBK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5OJmG/btrIy0cfkDU/gzbWsI5VlgyzQM4lZkkBK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5OJmG/btrIy0cfkDU/gzbWsI5VlgyzQM4lZkkBK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5OJmG%2FbtrIy0cfkDU%2FgzbWsI5VlgyzQM4lZkkBK1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2100&quot; height=&quot;554&quot; data-origin-width=&quot;2100&quot; data-origin-height=&quot;554&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;참고&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://yunhyeonglee.tistory.com/57&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://yunhyeonglee.tistory.com/57&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1659176001251&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Maria] Maxscale GUI 설치&quot; data-og-description=&quot;MariaDB MaxScale은 MariaDB 서버의 고가용성, 확장성 및 보안을 확장하는 동시에 기본 데이터베이스 인프라에서 분리하여 애플리케이션 개발을 단순화하는 데이터베이스 프록시입니다. read / write 분&quot; data-og-host=&quot;yunhyeonglee.tistory.com&quot; data-og-source-url=&quot;https://yunhyeonglee.tistory.com/57&quot; data-og-url=&quot;https://yunhyeonglee.tistory.com/57&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cIF2ac/hyPfZjm5NA/L1kALzL0q9ZiwraYlnPJvk/img.png?width=800&amp;amp;height=377&amp;amp;face=0_0_800_377,https://scrap.kakaocdn.net/dn/vTdBB/hyPfYSjAAU/CodiKo1vl1juEyXFjX5xkK/img.png?width=800&amp;amp;height=377&amp;amp;face=0_0_800_377,https://scrap.kakaocdn.net/dn/q0XbE/hyPfZjm5Pm/MiwKeDqJZV10DITwFnYMN0/img.png?width=1918&amp;amp;height=904&amp;amp;face=0_0_1918_904&quot;&gt;&lt;a href=&quot;https://yunhyeonglee.tistory.com/57&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://yunhyeonglee.tistory.com/57&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cIF2ac/hyPfZjm5NA/L1kALzL0q9ZiwraYlnPJvk/img.png?width=800&amp;amp;height=377&amp;amp;face=0_0_800_377,https://scrap.kakaocdn.net/dn/vTdBB/hyPfYSjAAU/CodiKo1vl1juEyXFjX5xkK/img.png?width=800&amp;amp;height=377&amp;amp;face=0_0_800_377,https://scrap.kakaocdn.net/dn/q0XbE/hyPfZjm5Pm/MiwKeDqJZV10DITwFnYMN0/img.png?width=1918&amp;amp;height=904&amp;amp;face=0_0_1918_904');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[Maria] Maxscale GUI 설치&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;MariaDB MaxScale은 MariaDB 서버의 고가용성, 확장성 및 보안을 확장하는 동시에 기본 데이터베이스 인프라에서 분리하여 애플리케이션 개발을 단순화하는 데이터베이스 프록시입니다. read / write 분&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;yunhyeonglee.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>DataBase/MySQL &amp;amp; MariaDB</category>
      <category>GUI</category>
      <category>MariaDB</category>
      <category>maxscale</category>
      <author>jeonghyun</author>
      <guid isPermaLink="true">https://jhdatabase.tistory.com/100</guid>
      <comments>https://jhdatabase.tistory.com/entry/MariaDB-Maxscale-GUI-%EA%B5%AC%EC%B6%95#entry100comment</comments>
      <pubDate>Sat, 30 Jul 2022 19:23:58 +0900</pubDate>
    </item>
  </channel>
</rss>