Mysql-ге қашықтықтан қосылудың үш тәсілі

Mysql localhost-та тұрғанда қалай қосылуды жақсы білеміз:

mysql -uroot -pxxxx

Ал егер mysql басқа серверде немесе виртуалкада болса ше? Оған қалай қосыламыз. Виртуалканы ашып, соның терминалында жұмыс жасай беруге болады, бірақ бұлай қашанғы жұмыс жасайсың. Сонымен төменде қашықтықтан mysql-ге қосылудың үш тәсілі келтірілген.


1. SSH арқылы серверге қосылу


ssh [email protected]
mysql -uroot -px.x.x.x

Ең қарапайым тәсіл. Терминалымыздан ssh-арқылы қосыламыз да mysql-ді пайдалана береміз.

Артықшылықтары:
  • ештеңені баптаудың қажеті жоқ
  • байланыс ssh арқылы, яғни, қауіпсіз
Кемшілігі:
  • localhost-та тұрған бағдарлама mysql-мен байланыса алмайды, яғни, мускулмен тек терминал арқылы ғана жұмыс жасай аламыз


2. SSH арқылы портты localhost-қа лақтыру

Негізгі ой мынандай: айталық mysql серверде 3306 портында іске қосылған, біз ssh арқылы аламыз да сервердегі 3306 портын localhost-тағы қалаған портымызға лақтырамыз, айталық 3307, яғни, localhost-тағы кез-келген 3307 портына сұраныс серверге жіберіледі.

Портты былай лақтыруға болады (бұл туралы мына мақалада толығырақ жазылған):

ssh -L :3307:127.0.0.1:3306 [email protected]

192.168.1.156 бұл біздің виртуалкамыздың ip адресі. Енді localhost-тан mysql-ге былай қосыламыз:

mysql -uroot -pxxxx -h 127.0.0.1 -P 3307


Артықшылықтары:
  • Байланыс ssh арқылы, қауіпсіз
  • Mysql localhost-та секілді болып тұрады, localhost-тағы бағдарламалар оңай жұмыс жасай алады

Кемшілігі:
  • Жұмыс кезінде лақтыру үшін орындаған команданы аяқтауға болмайды, ол әрдайым ашық тұруы керек


3. Mysql серверінің өзінде қашықтықтан байланысуға рұқсат беру

Бұл нұсқа шынайы серверлерге қолданылмауы тиіс. Қолдансаңыз, қауіпсіздік жағынан опық жеуіңіз мүмкін

Бұл нұсқада mysql серверін баптап, сырттан тікелей қосыла алатын етеміз. Ол үшін, mysql-дің баптау файлын /etc/mysql/my.cnf ашамыз (windows-та ол қайда жататынын білмеймін). Содан соң ондағы мынандай қатарды/баптауды табамыз:

bind-address = 127.0.0.1


Бұл баптау mysql серверіне қандай ip адрестен қосылуға болатындығын көрсетеді, үнсіз келісім бойынша ол 127.0.0.1 (сондықтан да әдетте сіз тек localhost арқылы ғана қосыла аласыз). Оны сіз өз ip адресіңізге өзгертіп қоя аласыз, мысалы:

bind-address = 192.168.2.120

Өзгерткен соң mysql-ді қайта жүктеуді ұмытпаңыз. Бірақ бұлай жасасаңыз сіз 127.0.0.1 арқылы қосыла алмай қаласыз, сондықтан тестілік виртуалкаларда, барлық ip адрестер үшін рұқсат берген жөн. Олай жасау үшін, бұл баптауды комменттеп тастаңыз:

# bind-address = 192.168.2.120

Бірақ mysql сіздерге әлі де рұқсат бермейді, өйткені енді mysql сізді деректор қоры деңгейінде жібермейді.

Кез-келген хосттан және кез-келген деректер қорына кіре алу үшін mysql-де мынандай сұраныс орындаңыз:

GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY 'мұнда парольді жазыңыз';

«root» пайдаланушының орнына өзіңіздің пайдаланушы логинін жаза аласыз. Бұл командадан соң сіз, сырттан mysql-ге былай қосыла аласыз:

mysql -uroot -pxxxx -h 192.168.1.156 -P 3306


«xxxx» орнына grant all командасында көрсетілген парольді жазасыз.

Тағы да ескертемін бұл тәсілді тек тестілеу кезінде, бағдарлама жазу кезінде, виртуалкаларға ғана қолдану керек. Бірақ жұмыс жасау кезінде өте ыңғайлы

Артықшылықтары:
  • Кез-келген жерден қосылуға болады
  • Жұмыс жасау кезінде ыңғайлы

Кемшілігі:
  • Қауіпсіздік жағынан олқылықтар пайда болуы мүмкін

  • +4
5 пікір
kamyrov
Үш әдісті де қолданданады екенмін, еске түсіргенін үшін рахмет)
kuaniysh
1,3 әдіспен қолданамын, рахмет жаксы жазылган!
vfvtnjd
Кешірерсіз, бұл жерде мен 3 әдіс көріп тұрғам жоқ. Себебі, -h параметрі жазылмаса, mysql сервердің адресін localhost деп кабылдайды. Сондықтан бұл "қысқартылған" түрі деп есептеуге болады ("<?" мен "<?php" сияқты нарсе).
Mysql ге қосылу мен SSH (серверге қосылу,OS) — екеуі мүлдем бөлек нәрсе, шатастырмау қажет. SSH туралы жазғандарыңызды алып тастай берсеңіздер де болады.
Меніңше mysql server ге қосылуға жоғарыда келтірілген мысалды тек 1-ші, жалпы әдісі деп қарастыруға болады
1) mysql -h host -u root -pxxxxxx -P port (протокол типі TCP болса ғана)
Және де
2) mysql -u root -pxxxx --socket=/path/to/mysql/socket.sock (соккет) көрсетуге болады.
raimbek
Сіз де кешірерсіз, бірақ сіз мақаланы толық оқып, оның не үшін жазылғанын түсінгеніңізге сенімдісіз ба?

Mysql-ге тікелей қосылу мен SSH-мен серверге қосылудың айырмышылығын білемін. Мен тек ssh-ны mysql-ге (виртуалкадағы немесе сервердегі mysql-ге, яғни localhost-тағы емес, ЯҒНИ қашықтықтағы) қосылуда қосымша құрал ретінде пайдалануды ұсынып/көрсетіп отырмын. Күнделікті орындалатын жұмысты жеңілдету үшін (әсіресе, егер сіз күніге 10 даған сервердегі mysql-ге қосылып тұратын болсаңыз)

-h туралы не үшін жазғаныңызда мүлдем түсінбедім, мен оны мақалада басқаша қызмет атқарады деп жаздым ба немесе оны дұрыс пайдаланбай отырмын ба? ал -h 127.0.0.1 деп мен біздің қайда қосылып жатқанымызды нақты көрсету үшін жазып отырмын.

Мынау үшін енді рақмет: mysql -u root -pxxxx --socket=/path/to/mysql/socket.sock, өйткені, мен оны осыған дейін пайдаланып көрмеппін, ал оны басқа серверде тұрған mysql үшін қалай пайдаланады? және мен не үшін әр қосылу кезінде сокеттің файлын іздеп отыруым керек? одан алдыңғы әдіс әлдеқайда жақсы емес па?
vfvtnjd
Ия, алдыңғы әдіс жақсы, қарсы емеспін. socket әдісін көрсеткен себебім :1 серверге 2 немесе одан да көп mysql инстанциясын орнатқан кезде пайдалы.
Тек тіркелген қолданушылар ғана пікір қалдыра алады.