Ansible: MySQL ๋ชจ๋“ˆ์ด ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ถŒํ•œ์„ ์ถ”๊ฐ€ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2013๋…„ 09์›” 29์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: ansible/ansible

๋ฒ„์ „ :

  • Ansible : 1.3.2
  • ํŒŒ์ด์ฌ : 2.7
  • OS : Debian 7 (ansible ํ˜ธ์ŠคํŠธ), Centos6.4 (ํด๋ผ์ด์–ธํŠธ), Debian Unstable (ํด๋ผ์ด์–ธํŠธ)
  • MySQL : mysql-5.5.30, amariadb-5.5.33a-MariaDB

์„ค์น˜ ๋ฐฉ๋ฒ• :

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ Ansible์„ ์„ค์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

 TARGET = "/ tmp / ansible01"
 sudo apt-get install python-setuptools
 sudo easy_install virtualenv
 cd $ TARGET && virtualenv ansible
 ์†Œ์Šค $ TARGET / ansible / bin / activate
 pip ์„ค์น˜ ansible

๊ธฐ์ˆ :

์ด ํ”Œ๋ ˆ์ด ๋ถ (๋ฌธ์„œ์—์„œ ๋ณต์‚ฌ / ๋ถ™์—ฌ ๋„ฃ๊ธฐ)์„ ์‚ฌ์šฉํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ์˜ mysql ์ฟผ๋ฆฌ๊ฐ€ ์‹ค์ œ๋กœ ์‚ฌ์šฉ์ž๋ฅผ ์ƒ์„ฑ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ถŒํ•œ์„ ์ ์šฉํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

 -์ด๋ฆ„ : Galera ์‚ฌ์šฉ์ž ๋น„๋ฐ€๋ฒˆํ˜ธ ์„ค์ •
 mysql_user : login_user = {{mysql_user}} login_password = {{mysql_password}} name = {{galera_user}} password = {{galera_password}} state = present priv = *. * : ALL

๋ฐœ์ƒํ•œ ์˜ค๋ฅ˜ :

REMOTE_MODULE mysql_user login_user = root login_password = ํ˜ธ๊ธฐ์‹ฌ ๋งŽ์€ ์ด๋ฆ„ = elvis password = spring state = present priv = *. * : ALL
 ์น˜๋ช…์  : [c6-4] => ํŒŒ์‹ฑ ์‹คํŒจ : Traceback (๊ฐ€์žฅ ์ตœ๊ทผ ํ˜ธ์ถœ ๋งˆ์ง€๋ง‰) :
 ํŒŒ์ผ "/root/.ansible/tmp/ansible-1380442867.96-101659379289717/mysql_user", ์ค„ 1348,
 ๋ณธ๊ด€()
 ํŒŒ์ผ "/root/.ansible/tmp/ansible-1380442867.96-101659379289717/mysql_user", ์ค„ 405, ์ฃผ
 ๋ณ€๊ฒฝ๋จ = user_mod (์ปค์„œ, ์‚ฌ์šฉ์ž, ํ˜ธ์ŠคํŠธ, ์•”ํ˜ธ, priv)
 user_mod์˜ ํŒŒ์ผ "/root/.ansible/tmp/ansible-1380442867.96-101659379289717/mysql_user", 188 ํ–‰
 privilege_revoke (์ปค์„œ, ์‚ฌ์šฉ์ž, ํ˜ธ์ŠคํŠธ, db_table, grant_option)
 privilege_revoke์—์žˆ๋Š” ํŒŒ์ผ "/root/.ansible/tmp/ansible-1380442867.96-101659379289717/mysql_user", 263 ํ–‰
 cursor.execute (์ฟผ๋ฆฌ)
 ํŒŒ์ผ "/usr/lib64/python2.6/site-packages/MySQLdb/cursors.py", 173 ํ–‰, ์‹คํ–‰ ์ค‘
 self.errorhandler (self, exc, value)
 ํŒŒ์ผ "/usr/lib64/python2.6/site-packages/MySQLdb/connections.py", 36 ํ–‰, defaulterrorhandler
 errorclass, errorvalue ๋ฐœ์ƒ
 _mysql_exceptions.OperationalError : (1045, " 'root'@ 'localhost'์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๊ฐ€ ๊ฑฐ๋ถ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค (์•”ํ˜ธ ์‚ฌ์šฉ : YES)")


 ์น˜๋ช…์  : ๋ชจ๋“  ํ˜ธ์ŠคํŠธ๊ฐ€ ์ด๋ฏธ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค. ์ค‘๋‹จ ์ค‘

์‚ฌ์šฉ์ž๋Š” ์‹ค์ œ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

 [root @ c6-4 ~] # mysql mysql -e "Select Host, User from user;" | ๊ทธ๋ ™ ์—˜๋น„์Šค
 | localhost | ์—˜๋น„์Šค |
bug mysql

๋ชจ๋“  3 ๋Œ“๊ธ€

์ด๊ฒƒ์€ MySQL ๋ชจ๋“ˆ ์ธ์ฆ ์งˆ๋ฌธ ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค (์•„๋งˆ๋„ my.cnf๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•  ํ•„์š”๊ฐ€ ์žˆ์Œ). ๋„์›€์ด ํ•„์š”ํ•˜๋ฉด ๋ฉ”์ผ ๋ง๋ฆฌ์ŠคํŠธ์— ๋“ค๋ฅด์‹ญ์‹œ์˜ค.

๊ตํ›ˆ : ์ƒ๊ฐ์—†์ด ๋ฌธ์„œ์—์„œ ๋ณต์‚ฌ / ๋ถ™์—ฌ ๋„ฃ๊ธฐํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.
๋ฏธ๋ž˜ ์„ธ๋Œ€๋ฅผ ์œ„ํ•ด :

์ด ์ž‘์—…์„ ์‚ฌ์šฉํ•˜์—ฌ mysql ์‚ฌ์šฉ์ž 'root'์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

 -์ด๋ฆ„-์ด๋ฆ„ : MySQL ๋ฃจํŠธ ๋น„๋ฐ€๋ฒˆํ˜ธ ์„ค์ •
 mysql_user : name = root password = {{mysql_password}} priv = *. * : ALL state = present

์ด๊ฒƒ์€ '๋ฃจํŠธ'์˜ GRANT ๊ถŒํ•œ์„ ๋ฐฉํ•ดํ•˜์—ฌ ์ƒˆ๋กœ ์ƒ์„ฑ ๋œ ์‚ฌ์šฉ์ž์—๊ฒŒ priv๋ฅผ ๋ถ€์—ฌํ•˜๋Š” ๋‹ค์Œ ๋น„ํŠธ์— ์‹คํŒจํ•œ ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค ....

์  ์žฅ, ๋‚˜์—๊ฒŒ๋„ ๊ฐ™์€ ์ผ์ด ์ผ์–ด๋‚ฌ๋‹ค. ๋ฌธ์„œ๋Š” ์ตœ๋Œ€ํ•œ ๋นจ๋ฆฌ ์—ฌ๊ธฐ์—์„œ ๋ณ€๊ฒฝํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
์ด์ œ ๋งŽ์€ ์‹œ์Šคํ…œ์„ ์ˆ˜๋™์œผ๋กœ ์ˆ˜์ •ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์กด ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์ผ๋ถ€ ํ˜ธ์ถœ ๋˜๋Š” ์‚ฌ์šฉ์ž ์ œ๊ฑฐ๊ฐ€ ์ž˜ ์ž‘๋™ํ•˜๋Š” ์ด์œ ๋ฅผ ํŒŒ์•…ํ•˜๋Š” ๋ฐ ์˜์›ํžˆ ๊ฑธ๋ ธ์ง€ ๋งŒ ๋™์ผํ•œ ์˜ฌ๋ฐ”๋ฅธ ์ž๊ฒฉ ์ฆ๋ช…์œผ๋กœ๋Š” ์ƒˆ ํ˜ธ์ถœ์„ ์ƒ์„ฑ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค ....
๋ฌธ์„œ๊ฐ€ ์ˆ˜์ • ๋  ๋•Œ๊นŒ์ง€ ๋‹ค์‹œ ์—ด์–ด์•ผํ•˜๋ฉฐ mysql_user ๋ชจ๋“ˆ์— ๋ฐฉ์ง€ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์žˆ๊ฑฐ๋‚˜ ์ตœ์†Œํ•œ ๊ฒฝ๊ณ ๊ฐ€ ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค !!!

์ด๊ฒƒ์€ ์˜๋„์ ์œผ๋กœ ๋งŽ์€ ์‹œ์Šคํ…œ์„ ๋ง๊ฐ€๋œจ๋ฆด ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ทธ๊ฒƒ์„ ์ฐพ๊ฑฐ๋‚˜ ๊ณ ์น˜๋Š” ๊ฒƒ์€ ๋ฒˆ๊ฑฐ ๋กญ์Šต๋‹ˆ๋‹ค.

๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ •๋ง๋กœ priv=*.*:ALL ํ†ตํ•ด ํ—ˆ๊ฐ€๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋ฃจํŠธ ์‚ฌ์šฉ์ž์—๊ฒŒ๋„์ด๋ฅผ ๊ฐ•์ œํ•˜๋Š” ๋‹ค๋ฅธ ์˜ต์…˜์ด ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค (๋ฌธ์„œ์— ํ—ˆ๊ฐ€ ๊ถŒํ•œ์ด์žˆ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์—†์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ํฐ ๊ฒฝ๊ณ ์™€ ํ•จ๊ป˜). ๊ถŒํ•œ ๋ถ€์—ฌ๊ฐ€ ๋‚จ์•„์žˆ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์—†์œผ๋ฉด ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

์ˆ˜๋™ ์ˆ˜์ •์€ ๋‹ค์Œ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ mysql์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
--skip-grant-tables

๊ทธ๋ฆฌ๊ณ  mysql ๋ช…๋ น์—์„œ ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค (์ฐธ๊ณ  : GRANT ... ALL .. ๊ทธ ๋ถ€์—ฌ ํ…Œ์ด๋ธ”์„ ๊ฑด๋„ˆ ๋›ฐ๊ธฐ ๋•Œ๋ฌธ์— ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค).

UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';
FLUSH PRIVILEGES;
์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰