{"componentChunkName":"component---src-templates-post-template-jsx","path":"/history/posts/2021-05-16--001","result":{"data":{"site":{"siteMetadata":{"title":"Blog by Eunyoung","subtitle":"작업 기록 블로그","copyright":"© All rights reserved.","author":{"name":"EunYoung","twitter":"#"},"disqusShortname":"","url":"https://ssongey.github.io"}},"markdownRemark":{"id":"af7e9e1b-ecd1-52e4-8070-bb9ba1efdcd6","html":"<p><span class=\"title__sub1\"> # Summary </span></p>\n<ul>\n<li>Docker 환경에서 MySQL Master-Replication 구성</li>\n<li>Orchestrator를 이용한 HA 구성</li>\n<li>ProxySQL을 이용한 Proxy Layer 구성</li>\n<li>Prometheus와 Grafana를 이용한 모니터링 구성</li>\n<li>Docker compose를 통한 일괄 서비스 배포</li>\n<li>Swarm Mode를 통한 확장 가능한 구성</li>\n</ul>\n<p><span class=\"title__sub1\"> # Master, Slave Replication 구성 </span></p>\n<p>\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/devHistoryBlog/static/fb12e6a568e1d0468940c55ef0e7661b/ae2f8/001.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n  \n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block;  max-width: 960px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 50.83333333333333%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAABYlAAAWJQFJUiTwAAACGUlEQVQoz4VSW28SQRTe/6Ox2mKRe0EpC7vsdfbCglwWaKENsRZSmrTGBDU+qC8+qVGbJmrir/z8ZoKPxoeTPXP2zDnfZbTx2Rrzi2sE4xOkZxcYLJaYnl9itrrC5PkaVn8KbzRDruUjc2jjYcP5Z+zrLjSzN4E7PMZh2EcrSdGIBjD4NbtjnkeoODFqXoJs0/3vQBmabD5wOrhT0bFTM4lE8LLHbZ7aWDB95AzBesA8RKEtI0DJClG2QxSZF7c1hVCkc1xu3uLj528YP1sRhcGLHps81bRT9fCoZaMe2KqeZ+QMn8td3K3IpT7/eyjZkQKitUn5dH3NgV9xRO3qokuKHdyvWQgmMW5+DvDlVqcULS5z8eBJm1LE2Lzv4+qNRZQm7lXbXERmEqGculu3kCH/vBkgmi5gcUnJ6kCPHbz+MMfmXQR30INIT1GxuzB7Nr7/WODTjQtvKNDuzaBHfSL1oZXtGAduooYppxhSE2nCbl0aEZFeSHMStOKhMqhgRqQakoXAY78PwVcgDa3yn1a0ZHOHTduBNKBIPWReIA1JP6vb2CeTvBVhj2wkEjk4b1BD6pc1AuZCgdCOzlf49fsW8+USObroujEcwi8R+V8H5QJL9OD7XVQZqsYo8UnZPIvwKcoEpZ5NPDnGi1cv0YwSVEg9bTro+AlyRJ6R2jKyvDzkwLRhQSe1vW29wP4hh474tOqUQ9b/AC6phmvy+G8pAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n    >\n      <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"001\"\n        title=\"\"\n        src=\"/devHistoryBlog/static/fb12e6a568e1d0468940c55ef0e7661b/d9199/001.png\"\n        srcset=\"/devHistoryBlog/static/fb12e6a568e1d0468940c55ef0e7661b/8ff5a/001.png 240w,\n/devHistoryBlog/static/fb12e6a568e1d0468940c55ef0e7661b/e85cb/001.png 480w,\n/devHistoryBlog/static/fb12e6a568e1d0468940c55ef0e7661b/d9199/001.png 960w,\n/devHistoryBlog/static/fb12e6a568e1d0468940c55ef0e7661b/07a9c/001.png 1440w,\n/devHistoryBlog/static/fb12e6a568e1d0468940c55ef0e7661b/29114/001.png 1920w,\n/devHistoryBlog/static/fb12e6a568e1d0468940c55ef0e7661b/ae2f8/001.png 2496w\"\n        sizes=\"(max-width: 960px) 100vw, 960px\"\n      />\n    </span>\n  </span>\n  \n  </a>\n    </p>\n<p><span class=\"title__sub2\"> Volume 디렉토리 생성 </span></p>\n<div class=\"gatsby-highlight\" data-language=\"cmd\"><pre class=\"language-cmd\"><code class=\"language-cmd\">mkdir -p /db/db001/data /db/db002/data /db/db/003/data \\\nmkdir -p /db/db001/log /db/db002/log /db/db003/log \\\nmkdir -p /db/db001/conf /db/db002/conf /db/db003/conf\n\nchmod 777 -R /db</code></pre></div>\n<p><span class=\"title__sub2\"> my.cnf 설정 </span></p>\n<ul>\n<li>my.cnf 의 permission은 644로 수정</li>\n</ul>\n<p><span class=\"title__sub3\"> 1. db001 설정 </span></p>\n<ul>\n<li>master 설정</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"shell\"><pre class=\"language-shell\"><code class=\"language-shell\"><span class=\"token comment\">#my.cnf</span>\n<span class=\"token punctuation\">[</span>mysqld<span class=\"token punctuation\">]</span>\nlog_bin                     <span class=\"token operator\">=</span> mysql-bin\nbinlog_format               <span class=\"token operator\">=</span> ROW\ngtid_mode                   <span class=\"token operator\">=</span> ON\nenforce-gtid-consistency    <span class=\"token operator\">=</span> <span class=\"token boolean\">true</span>\nserver-id                   <span class=\"token operator\">=</span> <span class=\"token number\">100</span>\nlog_slave_updates\ndatadir                     <span class=\"token operator\">=</span> /var/lib/mysql\nsocket                      <span class=\"token operator\">=</span> /var/lib/mysql/mysql.sock\n\n<span class=\"token comment\"># Disabling symbolic-links is recommended to prevent assorted security risks</span>\nsymbolic-links              <span class=\"token operator\">=</span> <span class=\"token number\">0</span>\n\nlog-error                   <span class=\"token operator\">=</span> /var/log/mysql/mysqld.log\npid-file                    <span class=\"token operator\">=</span> /var/run/mysqld/mysqld.pid\n\nreport_host                 <span class=\"token operator\">=</span> db001\n\n<span class=\"token punctuation\">[</span>mysqld_safe<span class=\"token punctuation\">]</span>\npid-file                    <span class=\"token operator\">=</span> /var/run/mysqld/mysqld.pid\nsocket                      <span class=\"token operator\">=</span> /var/lib/mysql/mysql.sock\n<span class=\"token function\">nice</span>                        <span class=\"token operator\">=</span> <span class=\"token number\">0</span></code></pre></div>\n<p><span class=\"title__sub3\"> 2. db002 설정 </span></p>\n<ul>\n<li>slave 설정, read_only 값 추가</li>\n<li>server-id, report_host 유일값으로 수정</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"shell\"><pre class=\"language-shell\"><code class=\"language-shell\"><span class=\"token comment\">#my.cnf</span>\n<span class=\"token punctuation\">[</span>mysqld<span class=\"token punctuation\">]</span>\nlog_bin                     <span class=\"token operator\">=</span> mysql-bin\nbinlog_format               <span class=\"token operator\">=</span> ROW\ngtid_mode                   <span class=\"token operator\">=</span> ON\nenforce-gtid-consistency    <span class=\"token operator\">=</span> <span class=\"token boolean\">true</span>\nserver-id                   <span class=\"token operator\">=</span> <span class=\"token number\">200</span> \nlog_slave_updates\ndatadir                     <span class=\"token operator\">=</span> /var/lib/mysql\nsocket                      <span class=\"token operator\">=</span> /var/lib/mysql/mysql.sock\nread_only\n\n<span class=\"token comment\"># Disabling symbolic-links is recommended to prevent assorted security risks</span>\nsymbolic-links              <span class=\"token operator\">=</span> <span class=\"token number\">0</span>\n\nlog-error                   <span class=\"token operator\">=</span> /var/log/mysql/mysqld.log\npid-file                    <span class=\"token operator\">=</span> /var/run/mysqld/mysqld.pid\n\nreport_host                 <span class=\"token operator\">=</span> db002\n\n<span class=\"token punctuation\">[</span>mysqld_safe<span class=\"token punctuation\">]</span>\npid-file                    <span class=\"token operator\">=</span> /var/run/mysqld/mysqld.pid\nsocket                      <span class=\"token operator\">=</span> /var/lib/mysql/mysql.sock\n<span class=\"token function\">nice</span>                        <span class=\"token operator\">=</span> <span class=\"token number\">0</span></code></pre></div>\n<h3>db003 설정</h3>\n<ul>\n<li>slave 설정, read_only 값 추가</li>\n<li>server-id, report_host 유일값으로 수정</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"shell\"><pre class=\"language-shell\"><code class=\"language-shell\"><span class=\"token comment\">#my.cnf</span>\n<span class=\"token punctuation\">[</span>mysqld<span class=\"token punctuation\">]</span>\nlog_bin                     <span class=\"token operator\">=</span> mysql-bin\nbinlog_format               <span class=\"token operator\">=</span> ROW\ngtid_mode                   <span class=\"token operator\">=</span> ON\nenforce-gtid-consistency    <span class=\"token operator\">=</span> <span class=\"token boolean\">true</span>\nserver-id                   <span class=\"token operator\">=</span> <span class=\"token number\">300</span>\nlog_slave_updates\ndatadir                     <span class=\"token operator\">=</span> /var/lib/mysql\nsocket                      <span class=\"token operator\">=</span> /var/lib/mysql/mysql.sock\nread_only\n\n<span class=\"token comment\"># Disabling symbolic-links is recommended to prevent assorted security risks</span>\nsymbolic-links              <span class=\"token operator\">=</span> <span class=\"token number\">0</span>\n\nlog-error                   <span class=\"token operator\">=</span> /var/log/mysql/mysqld.log\npid-file                    <span class=\"token operator\">=</span> /var/run/mysqld/mysqld.pid\n\nreport_host                 <span class=\"token operator\">=</span> db003\n\n<span class=\"token punctuation\">[</span>mysqld_safe<span class=\"token punctuation\">]</span>\npid-file                    <span class=\"token operator\">=</span> /var/run/mysqld/mysqld.pid\nsocket                      <span class=\"token operator\">=</span> /var/lib/mysql/mysql.sock\n<span class=\"token function\">nice</span>                        <span class=\"token operator\">=</span> <span class=\"token number\">0</span></code></pre></div>\n<h2>Container 생성</h2>\n<h2>Bridge Network 구성</h2>\n<ul>\n<li>container 의 network alias를 사용하기 위해 bridge network를 구성한다.</li>\n<li>container가 재시작되어 Ip가 변경되더라도 문제가 발생하지 않는다.</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"shell\"><pre class=\"language-shell\"><code class=\"language-shell\">docker network create --driver bridge db-bridge</code></pre></div>\n<h3>Master Container 생성</h3>\n<div class=\"gatsby-highlight\" data-language=\"shell\"><pre class=\"language-shell\"><code class=\"language-shell\">docker run -i -t --name db001 -p <span class=\"token number\">13306</span>:3306 <span class=\"token punctuation\">\\</span>\n--net db-bridge --net-alias<span class=\"token operator\">=</span>db001 <span class=\"token punctuation\">\\</span>\n-v /db/db001/data:/var/lib/mysql <span class=\"token punctuation\">\\</span>\n-v /db/db001/log:/var/log/mysql <span class=\"token punctuation\">\\</span>\n-v /db/db001/conf:/etc/percona-server.conf.d <span class=\"token punctuation\">\\</span>\n-e <span class=\"token assign-left variable\">MYSQL_ROOT_PASSWORD</span><span class=\"token operator\">=</span><span class=\"token string\">\"root\"</span> -d percona:5.7.30</code></pre></div>\n<h3>Slave Containers 생성</h3>\n<div class=\"gatsby-highlight\" data-language=\"shell\"><pre class=\"language-shell\"><code class=\"language-shell\">docker run -i -t --name db002 -p <span class=\"token number\">13307</span>:3306 <span class=\"token punctuation\">\\</span>\n--net db-bridge --net-alias<span class=\"token operator\">=</span>db001 <span class=\"token punctuation\">\\</span>\n-v /db/db002/data:/var/lib/mysql <span class=\"token punctuation\">\\</span>\n-v /db/db002/log:/var/log/mysql <span class=\"token punctuation\">\\</span>\n-v /db/db002/conf:/etc/percona-server.conf.d <span class=\"token punctuation\">\\</span>\n-e <span class=\"token assign-left variable\">MYSQL_ROOT_PASSWORD</span><span class=\"token operator\">=</span><span class=\"token string\">\"root\"</span> -d percona:5.7.30\n\ndocker run -i -t --name db003 -p <span class=\"token number\">13308</span>:3306 <span class=\"token punctuation\">\\</span>\n--net db-bridge --net-alias<span class=\"token operator\">=</span>db001 <span class=\"token punctuation\">\\</span>\n-v /db/db003/data:/var/lib/mysql <span class=\"token punctuation\">\\</span>\n-v /db/db003/log:/var/log/mysql <span class=\"token punctuation\">\\</span>\n-v /db/db003/conf:/etc/percona-server.conf.d <span class=\"token punctuation\">\\</span>\n-e <span class=\"token assign-left variable\">MYSQL_ROOT_PASSWORD</span><span class=\"token operator\">=</span><span class=\"token string\">\"root\"</span> -d percona:5.7.30</code></pre></div>\n<h3>Container 생성 확인</h3>\n<div class=\"gatsby-highlight\" data-language=\"shell\"><pre class=\"language-shell\"><code class=\"language-shell\">docker <span class=\"token function\">ps</span> --format <span class=\"token string\">\"table {{.ID}}<span class=\"token entity\" title=\"\\t\">\\t</span>{{.Names}}<span class=\"token entity\" title=\"\\t\">\\t</span>{{.Status}}\"</span></code></pre></div>\n<h2>Replication 설정</h2>\n<h3>Replication user 생성(db001)</h3>\n<div class=\"gatsby-highlight\" data-language=\"shell\"><pre class=\"language-shell\"><code class=\"language-shell\">docker <span class=\"token builtin class-name\">exec</span> -it -uroot db001 <span class=\"token function\">bash</span>\nmysql -uroot -p\n\nmysql<span class=\"token operator\">></span> create user <span class=\"token string\">'repl'</span>@<span class=\"token string\">'%'</span> identified by <span class=\"token string\">'repl'</span><span class=\"token punctuation\">;</span>\nmysql<span class=\"token operator\">></span> grant replication slave on *.* to <span class=\"token string\">'repl'</span>@<span class=\"token string\">'%'</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h3>Replication 설정(db002, db003)</h3>\n<div class=\"gatsby-highlight\" data-language=\"shell\"><pre class=\"language-shell\"><code class=\"language-shell\">docker <span class=\"token builtin class-name\">exec</span> -it -uroot db002 <span class=\"token function\">bash</span>\nmysql -uroot -p\nmysql<span class=\"token operator\">></span> change master to <span class=\"token assign-left variable\">master_host</span><span class=\"token operator\">=</span><span class=\"token string\">'db001'</span>, <span class=\"token punctuation\">\\</span>\n        <span class=\"token assign-left variable\">master_user</span><span class=\"token operator\">=</span><span class=\"token string\">'repl'</span>, <span class=\"token assign-left variable\">master_password</span><span class=\"token operator\">=</span><span class=\"token string\">'repl'</span>, <span class=\"token punctuation\">\\</span>\n        <span class=\"token assign-left variable\">master_auto_position</span><span class=\"token operator\">=</span><span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\nmysql<span class=\"token operator\">></span> start slave<span class=\"token punctuation\">;</span>\nmysql<span class=\"token operator\">></span> show status<span class=\"token punctuation\">\\</span>G</code></pre></div>\n<h1>Orchestrator를 이용한 HA 구성</h1>\n<ul>\n<li>master 가 장애가 났을 경우, 자동으로 failover가 되도록 구성</li>\n</ul>\n<h2>Orchestrator Container 실행</h2>\n<div class=\"gatsby-highlight\" data-language=\"shell\"><pre class=\"language-shell\"><code class=\"language-shell\">docker run -i -t --name orchestroator -h orchestrator <span class=\"token punctuation\">\\</span>\n--net db-bridge --net-alias<span class=\"token operator\">=</span>orchestrator\n-p <span class=\"token number\">13000</span>:3000 -d openarkcode/orchestrator:latest</code></pre></div>\n<h2>Orchestrator를 위한 mysql user 생성</h2>\n<ul>\n<li>orchestroator 를 위한 mysql user를 생성하는데, </li>\n<li>db container의 IP대역 확인하여 user의 host로 사용한다.</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"shell\"><pre class=\"language-shell\"><code class=\"language-shell\">docker inspect --format <span class=\"token string\">'{{.NetworkSettings.Networks.db-bridge.IPAddress}}'</span> db001\n\n<span class=\"token number\">172.18</span>.0.2</code></pre></div>\n<ul>\n<li>db001에서 mysql user생성</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"shell\"><pre class=\"language-shell\"><code class=\"language-shell\">docker <span class=\"token builtin class-name\">exec</span> -it -uroot db001 /bin/bash\nmysql -uroot -p\n\nmysql<span class=\"token operator\">></span> create user orc_client_user@<span class=\"token string\">'172.%'</span> identified by <span class=\"token string\">'orc_client_password'</span><span class=\"token punctuation\">;</span>\nmysql<span class=\"token operator\">></span> grant super, process, replication slave, reload on *.* to orc_client_user@<span class=\"token string\">'172.%'</span><span class=\"token punctuation\">;</span>\nmysql<span class=\"token operator\">></span> grant <span class=\"token keyword\">select</span> on mysql.slave_master_info to orc_client_user@<span class=\"token string\">'172.%'</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h2>HA 구성</h2>\n<ul>\n<li><a href=\"http://%7Bdocker_host_ip%7D:13000/web/clusters\">http://{docker_host_ip}:13000/web/clusters</a> 접속</li>\n<li>Clusters > Discover 에서 instance 생성</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">db001, 3306 입력 후 submit</code></pre></div>\n<ul>\n<li>Cluster > Dashboard 에서 확인</li>\n</ul>\n<h2>Auto FailOver를 위한 Orchestrator의 설정 변경</h2>\n<div class=\"gatsby-highlight\" data-language=\"shell\"><pre class=\"language-shell\"><code class=\"language-shell\">docker <span class=\"token builtin class-name\">exec</span> -it orchestrator <span class=\"token function\">bash</span>\n<span class=\"token builtin class-name\">cd</span> <span class=\"token function\">vi</span> /etc/orchestrator.conf.json\n\n  <span class=\"token string\">\"RecoverMasterClusterFilters\"</span><span class=\"token builtin class-name\">:</span> <span class=\"token punctuation\">[</span> <span class=\"token string\">\"*\"</span> <span class=\"token punctuation\">]</span>,\n  <span class=\"token punctuation\">..</span>.\n  <span class=\"token string\">\"PromotionIgnoreHostnameFilters\"</span><span class=\"token builtin class-name\">:</span> <span class=\"token punctuation\">[</span> <span class=\"token string\">\"db003\"</span> <span class=\"token punctuation\">]</span>, //db003 은 승격되지 않는다.</code></pre></div>\n<ul>\n<li>orchestrator 재시작</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"shell\"><pre class=\"language-shell\"><code class=\"language-shell\">docker restart orchestrator</code></pre></div>\n<h1>ProxySQL을 이용한 Proxy Layer 구성</h1>\n<h2>ProxySQL Container 실행</h2>\n<div class=\"gatsby-highlight\" data-language=\"shell\"><pre class=\"language-shell\"><code class=\"language-shell\"><span class=\"token function\">mkdir</span> -p /db/proxysql/data /db/proxysql/conf\n<span class=\"token function\">chmod</span> <span class=\"token number\">777</span> /db/proxysql /db/proxysql/data /db/proxysql/conf</code></pre></div>\n<h3>conf 파일 생성</h3>\n<ul>\n<li>conf 디렉토리에 proxysql.cnf 파일 생성</li>\n<li>파일 permission 은 644</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"shell\"><pre class=\"language-shell\"><code class=\"language-shell\"><span class=\"token comment\">#proxysql.cnf</span></code></pre></div>\n<h3>Container 실행</h3>\n<div class=\"gatsby-highlight\" data-language=\"shell\"><pre class=\"language-shell\"><code class=\"language-shell\">docker run -i -t --name proxysql -h proxysql <span class=\"token punctuation\">\\</span>\n--net db-bridge --net-alias<span class=\"token operator\">=</span>proxysql <span class=\"token punctuation\">\\</span>\n-p <span class=\"token number\">16032</span>:6032 -p <span class=\"token number\">16033</span>:6033\n-v /db/proxysql/data:/var/lib/proxysql <span class=\"token punctuation\">\\</span>\n-v /db/proxysql/conf/proxysql.cnf:/etc/proxysql.cnf <span class=\"token punctuation\">\\</span>\n-d proxysql/proxysql</code></pre></div>\n<h3>ProxySQL Admin 접속</h3>\n<div class=\"gatsby-highlight\" data-language=\"shell\"><pre class=\"language-shell\"><code class=\"language-shell\">mysql -h127.0.0.1 -p16032 -uradmin -pradmin --prompt <span class=\"token string\">\"ProxySQL Admin>\"</span></code></pre></div>\n<h3>테스트 환경 구성</h3>\n<ul>\n<li>테스트 데이터베이스 생성</li>\n<li>어플리케이션에서 사용한 유저 생성</li>\n<li>proxysql용 모니터링 user 생성</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"shell\"><pre class=\"language-shell\"><code class=\"language-shell\">docker <span class=\"token builtin class-name\">exec</span> -it -uroot db001 <span class=\"token function\">bash</span>\nmysql -uroot -p\n\nmysql<span class=\"token operator\">></span> create database testdb default character <span class=\"token builtin class-name\">set</span> utf8<span class=\"token punctuation\">;</span>\nmysql<span class=\"token operator\">></span> create user appuser@<span class=\"token string\">'%'</span> identified by <span class=\"token string\">'appuser'</span><span class=\"token punctuation\">;</span>\nmysql<span class=\"token operator\">></span> grant select, insert, update, delete on testdb.* to appuser@<span class=\"token string\">'%'</span><span class=\"token punctuation\">;</span>\nmysql<span class=\"token operator\">></span> create user <span class=\"token string\">'monitor'</span>@<span class=\"token string\">'%'</span> identified by <span class=\"token string\">'monitor'</span><span class=\"token punctuation\">;</span>\nmysql<span class=\"token operator\">></span> grant replication client on *.* to <span class=\"token string\">'monitor'</span>@<span class=\"token string\">'%'</span><span class=\"token punctuation\">;</span>\nmysql<span class=\"token operator\">></span> flush privileges<span class=\"token punctuation\">;</span></code></pre></div>\n<ul>\n<li>\n<p>proxysql</p>\n<ul>\n<li>hostgroup에 db서버 정보 입력\n— write group : 10, read group : 20</li>\n<li>app user 정보 입력</li>\n<li>쿼리 룰 정보 입력</li>\n</ul>\n</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"shell\"><pre class=\"language-shell\"><code class=\"language-shell\">mysql -h127.0.0.1 -P16032 -uradmin -pradmin --prompt <span class=\"token string\">\"ProxySQL Admin>\"</span>\n\nProxySQL Admin<span class=\"token operator\">></span> insert into mysql_servers<span class=\"token punctuation\">(</span>hostgroup_id, hostname, port<span class=\"token punctuation\">)</span> values <span class=\"token punctuation\">(</span><span class=\"token number\">10</span>, <span class=\"token string\">'db001'</span>, <span class=\"token number\">3306</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\nProxySQL Admin<span class=\"token operator\">></span> insert into mysql_servers<span class=\"token punctuation\">(</span>hostgroup_id, hostname, port<span class=\"token punctuation\">)</span> values <span class=\"token punctuation\">(</span><span class=\"token number\">20</span>, <span class=\"token string\">'db001'</span>, <span class=\"token number\">3306</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\nProxySQL Admin<span class=\"token operator\">></span> insert into mysql_servers<span class=\"token punctuation\">(</span>hostgroup_id, hostname, port<span class=\"token punctuation\">)</span> values <span class=\"token punctuation\">(</span><span class=\"token number\">20</span>, <span class=\"token string\">'db002'</span>, <span class=\"token number\">3306</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\nProxySQL Admin<span class=\"token operator\">></span> insert into mysql_servers<span class=\"token punctuation\">(</span>hostgroup_id, hostname, port<span class=\"token punctuation\">)</span> values <span class=\"token punctuation\">(</span><span class=\"token number\">20</span>, <span class=\"token string\">'db003'</span>, <span class=\"token number\">3306</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\nProxySQL Admin<span class=\"token operator\">></span> insert into mysql_replication_hostgroups values <span class=\"token punctuation\">(</span><span class=\"token number\">10</span>, <span class=\"token number\">20</span>, <span class=\"token string\">'read_only'</span>, <span class=\"token string\">''</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\"># app </span>\nProxySQL Admin<span class=\"token operator\">></span> insert into mysql_users<span class=\"token punctuation\">(</span>username, password, default_hostgroup, transaction_persistent<span class=\"token punctuation\">)</span> values <span class=\"token punctuation\">(</span><span class=\"token string\">'appuser'</span>, <span class=\"token string\">'apppass'</span>, <span class=\"token number\">10</span>, <span class=\"token number\">0</span><span class=\"token punctuation\">)</span>\n\nProxySQL Admin<span class=\"token operator\">></span> insert into mysql_query_rules<span class=\"token punctuation\">(</span>rule_id, active, match_pattern, destination_hostgroup<span class=\"token punctuation\">)</span> values <span class=\"token punctuation\">(</span><span class=\"token number\">1</span>, <span class=\"token number\">1</span>, <span class=\"token string\">'^SELECT.*FOR UPDATE$'</span>, <span class=\"token number\">10</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\nProxySQL Admin<span class=\"token operator\">></span> insert into mysql_query_rules<span class=\"token punctuation\">(</span>rule_id, active, match_pattern, destination_hostgroup<span class=\"token punctuation\">)</span> values <span class=\"token punctuation\">(</span><span class=\"token number\">2</span>, <span class=\"token number\">1</span>, <span class=\"token string\">'^SELECT'</span>, <span class=\"token number\">20</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n\nProxySQL Admin<span class=\"token operator\">></span> load mysql servers to runtime<span class=\"token punctuation\">;</span>\nProxySQL Admin<span class=\"token operator\">></span> save mysql servers to disk<span class=\"token punctuation\">;</span></code></pre></div>","fields":{"tagSlugs":["/tags/docker/"],"slug":"/history/posts/2021-05-16--001"},"frontmatter":{"title":"따라하며 배우는 MySQL on Docker 실습","tags":["docker"],"date":"2021-05-16","description":""}}},"pageContext":{"slug":"/history/posts/2021-05-16--001"}},"staticQueryHashes":[]}