«VM» и «MySql»: разница между страницами

Материал из support.qbpro.ru
(Различия между страницами)
imported>Supportadmin
 
imported>Vix
Нет описания правки
 
Строка 1: Строка 1:
http://nodejs.org/api/vm.html
==Help MySql==
* Список пользователей:
SELECT USER from mysql.user;
* Создание пользователя:
CREATE USER 'user'@'localhost' IDENTIFIED BY 'secret';
* Удаление пользователя:
DROP USER user@localhost;
* Предоставить права пользователю:
GRANT ALL PRIVILEGES ON dbname.* TO 'user'@'localhost';
* Предоставить супер права пользователю:
GRANT ALL PRIVILEGES ON dbname.* TO 'user'@'localhost' WITH GRANT OPTION;
* Права равные root для работы через phpmyadmin
GRANT ALL PRIVILEGES ON  *.* TO 'user'@'%' REQUIRE NONE WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;


'''2 - Unstable'''
==Настройка PhpMyAdmin==
Процедура «переподключения» phpMyAdmin на работу с внешним сервером достаточно проста, но вызывает вопросы у тех, кто занимается всем этим недавно или неглубоко.


В Node.js, JavaScript код может быть скомпилирован и сразу выполнен или скомпилирован, а запущен позже или скомпилирован, сохранен и еще позже запущен :). Для этого неоходимо включить в код require('vm');.
В данной статье мы рассмотрим несколько вариантов подключения phpMyAdmin ко внешнему серверу, так как задачи и условия у всех разные. В примере я использую сервер баз данных MariaDB, ОС Ubuntu и phpMyAdmin версии 4.5.4, что практически не важно, так как всё достаточно просто. PhpMyAdmin установлен на домашний ПК, но с тем же успехом он может быть настроен и на удалённом сервере. Имеется ввиду, что всё прикладное ПО, такое как непосредственно сам сервер БД, http-сервер и php у вас уже установлено.


'''Внимание'''
* Пример первый (доступ с паролем).


The vm module has many known issues and edge cases. If you run into issues or unexpected behavior, please consult the open issues on GitHub. Some of the biggest problems are described below.
Сервер баз данных расположен на машине с адресом 10.10.1.10. PhpMyAdmin устанавливаем на локальный ПК с адресом 10.10.1.20. Необходимо убедиться, что сервер баз данных принимает внешние соединения. Правим my.cnf (/etc/mysql/my.cnf). В строке bind-address по умолчанию указан адрес 127.0.0.1, что запрещает серверу принимать внешние соединения. Заменяем его на 0.0.0.0, что разрешит внешние соединения с любого адреса. В целях безопасности лучше уточнить адрес, если вы не планируете подключаться к серверу из разных источников. В этом примере будет использоваться строка следующего вида:


'''Sandboxes'''
bind-address = 10.10.1.20


Аргумент sandbox в vm.runInNewContext и vm.createContext , наряду с аргументом initSandbox в vm.createContext, ведут себя не так, как можно было ожидать, и обычно их поведение варьируется между различными версиями Node.
Сохраняем и перезагружаем.


The key issue to be aware of is that V8 provides no way to directly control the global object used within a context. As a result, while properties of your sandbox object will be available in the context, any properties from the prototypes of the sandbox may not be available. Furthermore, the this expression within the global scope of the context evaluates to the empty object ({}) instead of to your sandbox.
sudo service mysql restart


Your sandbox's properties are also not shared directly with the script. Instead, the properties of the sandbox are copied into the context at the beginning of execution, and then after execution, the properties are copied back out in an attempt to propagate any changes.
На ПК (или другой удалённый сервер) устанавливаем phpMyAdmin.


'''Globals'''
sudo apt install phpmyadmin


Properties of the global object, like Array and String, have different values inside of a context. This means that common expressions like [] instanceof Array or Object.getPrototypeOf([]) === Array.prototype may not produce expected results when used inside of scripts evaluated via the vm module.
В процессе установки отказываемся от конфигурации (конфигурировать нечего; сервер баз данных на удалённой машине).


Some of these problems have known workarounds listed in the issues for vm on GitHub. for example, Array.isArray works around the example problem with Array.
Далее правим конфигурационный файл phpMyAdmin config.inc.php (/etc/phpmyadmin/config.inc.php). Если это была свежая установка и на локальном хосте нет сервера баз данных, то удаляем все строки (кроме первой «<?php») и пишем следующее:


/* External Server #1 */
  $i++;
  $cfg['Servers'][$i]['verbose'] = 'Server Name';
  $cfg['Servers'][$i]['host'] = '10.10.1.10';
  $cfg['Servers'][$i]['connect_type'] = 'tcp';
  $cfg['Servers'][$i]['extension'] = 'mysqli';
  $cfg['Servers'][$i]['auth_type'] = 'cookie';
  $cfg['Servers'][$i]['AllowNoPassword'] = false;


=== vm.runInThisContext(code, [filename]) ===
Вместо Server Name вписываем что угодно. Сохраняем и закрываем файл.


vm.runInThisContext()  компилирует код, запускает его и возвращает результат. Запущенный код не имеет доступа к локальной области видимости переменных (local scope). filename необязательный параметр, и используется только при трассировке (stack traces).
==Конвертирование базы из postgresql в mysql==
* скачиваем [https://github.com/ChrisLundquist/pg2mysql pg2mysql]


Пример ипользования vm.runInThisContext и eval для запуска кода:
git clone https://github.com/ChrisLundquist/pg2mysql.git
cd pg2mysql


<nowiki>var localVar = 123,
* сохраняем дамп из postgresql ('''пример сохранение всех таблиц для wordpress - wp*''')
    usingscript, evaled,
sudo -u postgres pg_dump --quote-all-identifiers --no-acl --no-owner --table=wp_* --format p --data-only wordpress -f wordpress_pgsql.sql
    vm = require('vm');


usingscript = vm.runInThisContext('localVar = 1;',
* конвертируем в формат mysql
  'myfile.vm');
php pg2mysql_cli.php worpress_pgsql.sql wordpress_mysql.sql
console.log('localVar: ' + localVar + ', usingscript: ' +
  usingscript);
evaled = eval('localVar = 1;');
console.log('localVar: ' + localVar + ', evaled: ' +
  evaled);


// localVar: 123, usingscript: 1
* теперь необходимо заменить все таблицы с `"public"."wp_*"` на 'wp_*` это можно сделать в редакторе по F4
// localVar: 1, evaled: 1</nowiki>
* не забудьте исправить '''"` (''' на ''''('''
* теперь меняем sql команду с INSERT на REPLACE так же по F4
* все, дамп можно заливать в базу, предварительно создайте из wordpress начальную структуру таблиц через install и потом вносите данные.


===vm.runInNewContext(code, [sandbox], [filename])===
'''ИСТОЧНИКИ'''
<hr>
* [http://www.opennet.ru/docs/RUS/mysqladm/userman.html Управление пользователями в MySQL]
* [https://proft.me/2011/07/19/mysql-poleznye-komandy-i-nastrojki/ mysql: полезные команды и настройки ]
* [https://www.newalive.net/190-upravlenie-vneshnimi-bazami-dannyh-cherez-phpmyadmin.html PhpMyAdmin]
<hr>
* [http://gahcep.github.io/blog/2013/03/11/linux-mysql-setup/ Правильная установка и настройка MySQL]
* [https://www.hostcms.ru/documentation/server/mysql/ Настройка MySQL]
* [http://linux.mixed-spb.ru/databases/mysql_setup.php Установка и первоначальная настройка MySQL в linux]
* [http://linux.cpms.ru/?p=180 Руководство по MySQL для начинающих]
* [http://cruw.blogspot.ru/2011/11/mysql.html Установка и настройка MySql]
* [https://firstwiki.ru/index.php/%D0%9A%D0%B0%D0%BA_%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%B8%D1%82%D1%8C_%D0%B4%D0%B0%D0%BC%D0%BF_MySQL_%D0%B1%D0%B0%D0%B7%D1%8B_%D1%87%D0%B5%D1%80%D0%B5%D0%B7_%D0%BA%D0%BE%D0%BD%D1%81%D0%BE%D0%BB%D1%8C Как загрузить дамп MySQL базы через консоль]
* [https://habr.com/post/105954/ MySQL шпаргалки]
* [https://www.newalive.net/190-upravlenie-vneshnimi-bazami-dannyh-cherez-phpmyadmin.html Управление внешними базами данных через phpMyAdmin]
* [https://geeksmagazine.org/post/7/kak-sozdat-polzovatelya-i-dat-emu-prava-v-mysql Как создать пользователя и дать ему права в MySQL]
* [https://andy-blog.ru/kak-sozdat-novogo-polzovatelya-mysql Как создать нового пользователя MySQL и настроить права доступа ]
* [https://ruhighload.com/%D0%9A%D0%B0%D0%BA+%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B8%D1%82%D1%8C+mysql+master-slave+%D1%80%D0%B5%D0%BF%D0%BB%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8E%3F Как настроить MySQL Master-Slave репликацию?]
* [https://server-gu.ru/mysql-replication-master-slave/ Настройка репликации MySQL MASTER SLAVE]
* [http://blog.anthonyaxenov.ru/2018/10/15/%D1%88%D0%BF%D0%B0%D1%80%D0%B3%D0%B0%D0%BB%D0%BA%D0%B0-master-slave-%D1%80%D0%B5%D0%BF%D0%BB%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F-mysql-5-7/ Шпаргалка: Master-slave репликация MySQL 5.7]


vm.runInNewContext() компилирует код, а затем запускает его в sandbox и возвращает результат. Запущенный код не имеет доступа к локальной области видимости переменных (local scope). Объект sandbox используется как глобальный объект (global object) для кода. sandbox и filename необязательные параметры, и filename используется только при трассировке (stack traces).
'''ПОЛЕЗНОЕ:'''
 
<hr>
Example: compile and execute code that increments a global variable and sets a new one. These globals are contained in the sandbox.
* [https://www.8host.com/blog/replikaciya-baz-dannyx-mysql-po-tipu-master-slave/ Репликация баз данных MySQL по типу Master/Slave]
 
<nowiki>var util = require('util'),
    vm = require('vm'),
    sandbox = {
      animal: 'cat',
      count: 2
    };
 
vm.runInNewContext('count += 1; name = "kitty"', sandbox, 'myfile.vm');
console.log(util.inspect(sandbox));
 
// { animal: 'cat', count: 3, name: 'kitty' }</nowiki>
Note that running untrusted code is a tricky business requiring great care. To prevent accidental global variable leakage, vm.runInNewContext is quite useful, but safely running untrusted code requires a separate process.
 
In case of syntax error in code, vm.runInNewContext emits the syntax error to stderr and throws an exception.
 
==vm.runInContext(code, context, [filename])==
vm.runInContext compiles code, then runs it in context and returns the result. A (V8) context comprises a global object, together with a set of built-in objects and functions. Running code does not have access to local scope and the global object held within context will be used as the global object for code. filename is optional, it's used only in stack traces.
 
Example: compile and execute code in a existing context.
 
<nowiki>var util = require('util'),
    vm = require('vm'),
    initSandbox = {
      animal: 'cat',
      count: 2
    },
    context = vm.createContext(initSandbox);
 
vm.runInContext('count += 1; name = "CATT"', context, 'myfile.vm');
console.log(util.inspect(context));
 
// { animal: 'cat', count: 3, name: 'CATT' }</nowiki>
Note that createContext will perform a shallow clone of the supplied sandbox object in order to initialize the global object of the freshly constructed context.
 
Note that running untrusted code is a tricky business requiring great care. To prevent accidental global variable leakage, vm.runInContext is quite useful, but safely running untrusted code requires a separate process.
 
In case of syntax error in code, vm.runInContext emits the syntax error to stderr and throws an exception.
 
 
==vm.createContext([initSandbox])==
vm.createContext() создает новый контекст который используется в качестве второго аргумента при последующем вызове в vm.runInContext(). A (V8) context comprises a global object together with a set of build-in objects and functions. The optional argument initSandbox will be shallow-copied to seed the initial contents of the global object used by the context.
 
==vm.createScript(code, [filename])==
createScript compiles code but does not run it. Instead, it returns a vm.Script object representing this compiled code. This script can be run later many times using methods below. The returned script is not bound to any global object. It is bound before each run, just for that run. filename is optional, it's only used in stack traces.
 
In case of syntax error in code, createScript prints the syntax error to stderr and throws an exception.
 
==Class: Script==
A class for running scripts. Returned by vm.createScript.
 
==script.runInThisContext()==
Similar to vm.runInThisContext but a method of a precompiled Script object. script.runInThisContext runs the code of script and returns the result. Running code does not have access to local scope, but does have access to the global object (v8: in actual context).
 
Example of using script.runInThisContext to compile code once and run it multiple times:
 
<nowiki>var vm = require('vm');
 
globalVar = 0;
 
var script = vm.createScript('globalVar += 1', 'myfile.vm');
 
for (var i = 0; i < 1000 ; i += 1) {
  script.runInThisContext();
}
 
console.log(globalVar);
 
// 1000</nowiki>
==script.runInNewContext([sandbox])==
Similar to vm.runInNewContext a method of a precompiled Script object. script.runInNewContext runs the code of script with sandbox as the global object and returns the result. Running code does not have access to local scope. sandbox is optional.
 
Example: compile code that increments a global variable and sets one, then execute this code multiple times. These globals are contained in the sandbox.
 
<nowiki>var util = require('util'),
    vm = require('vm'),
    sandbox = {
      animal: 'cat',
      count: 2
    };
 
var script = vm.createScript('count += 1; name = "kitty"', 'myfile.vm');
 
for (var i = 0; i < 10 ; i += 1) {
  script.runInNewContext(sandbox);
}
 
console.log(util.inspect(sandbox));
 
// { animal: 'cat', count: 12, name: 'kitty' }</nowiki>
Note that running untrusted code is a tricky business requiring great care. To prevent accidental global variable leakage, script.runInNewContext is quite useful, but safely running untrusted code requires a separate process.
 
 
 
 
 
 
 
=== Методы ===
<nowiki>createContext([Object initSandbox]) -> Object</nowiki>
vm.createContext() '''''создает новый контекст''''' который используется в качестве второго аргумента при последующем вызове в vm.runInContext().
<nowiki>createScript(String code[, String filename]) -> vm.Script</nowiki>
Этот скрипт может быть запущен намного позже использую другие методы VM. В случае синтаксической ошибки в коде,  createScript напечатает ошибку в stderr и вызовет exception(исключение).
<nowiki>runInContext(String code, Object context[, String filename]) -> String</nowiki>
vm.runInContext() компилирует код, а затем запускает его в контексте и возвращает результат.
<nowiki>runInNewContext(String code[, Object sandbox][, String filename])</nowiki>
vm.runInNewContext() компилирует код, а затем запускает его в sandbox и возвращает результат. Запущенный код не имеет доступа к локальной области видимости переменных (local scope). Объект sandbox используется как глобальный объект (global object) для кода. sandbox и filename необязательные параметры, и filename используется только при трассировке (stack traces).
<nowiki>runInThisContext(String code[, String filename]) -> String</nowiki>
vm.runInThisContext() компилирует код, как если бы он был загружен из файла, запускает его и возвращает результат. Запущенный код не имеет доступа к локальной области видимости переменных (local scope). filename необязательный параметр, и используется только при трассировке (stack traces).
 
== vm.Script ==
 
Этот объект создается как результат матода vm.createScript(). Он представляет собой некоторый скомпилированный код, чем может быть запущен позже.
 
===Methods===
<nowiki>runInNewContext([Object sandbox]) -> String</nowiki>
Аналогичен vm.runInNewContext(), этот метод прекомпилирует Script object.
<nowiki>runInThisContext() -> String</nowiki>
Аналогичен vm.runInThisContext(), но  метод прекомпилирует Script object.

Версия от 03:46, 5 мая 2020

Help MySql

  • Список пользователей:
SELECT USER from mysql.user;
  • Создание пользователя:
CREATE USER 'user'@'localhost' IDENTIFIED BY 'secret';
  • Удаление пользователя:
DROP USER user@localhost;
  • Предоставить права пользователю:
GRANT ALL PRIVILEGES ON dbname.* TO 'user'@'localhost';
  • Предоставить супер права пользователю:
GRANT ALL PRIVILEGES ON dbname.* TO 'user'@'localhost' WITH GRANT OPTION;
  • Права равные root для работы через phpmyadmin
GRANT ALL PRIVILEGES ON  *.* TO 'user'@'%' REQUIRE NONE WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;

Настройка PhpMyAdmin

Процедура «переподключения» phpMyAdmin на работу с внешним сервером достаточно проста, но вызывает вопросы у тех, кто занимается всем этим недавно или неглубоко.

В данной статье мы рассмотрим несколько вариантов подключения phpMyAdmin ко внешнему серверу, так как задачи и условия у всех разные. В примере я использую сервер баз данных MariaDB, ОС Ubuntu и phpMyAdmin версии 4.5.4, что практически не важно, так как всё достаточно просто. PhpMyAdmin установлен на домашний ПК, но с тем же успехом он может быть настроен и на удалённом сервере. Имеется ввиду, что всё прикладное ПО, такое как непосредственно сам сервер БД, http-сервер и php у вас уже установлено.

  • Пример первый (доступ с паролем).

Сервер баз данных расположен на машине с адресом 10.10.1.10. PhpMyAdmin устанавливаем на локальный ПК с адресом 10.10.1.20. Необходимо убедиться, что сервер баз данных принимает внешние соединения. Правим my.cnf (/etc/mysql/my.cnf). В строке bind-address по умолчанию указан адрес 127.0.0.1, что запрещает серверу принимать внешние соединения. Заменяем его на 0.0.0.0, что разрешит внешние соединения с любого адреса. В целях безопасности лучше уточнить адрес, если вы не планируете подключаться к серверу из разных источников. В этом примере будет использоваться строка следующего вида:

bind-address		= 10.10.1.20

Сохраняем и перезагружаем.

sudo service mysql restart

На ПК (или другой удалённый сервер) устанавливаем phpMyAdmin.

sudo apt install phpmyadmin

В процессе установки отказываемся от конфигурации (конфигурировать нечего; сервер баз данных на удалённой машине).

Далее правим конфигурационный файл phpMyAdmin config.inc.php (/etc/phpmyadmin/config.inc.php). Если это была свежая установка и на локальном хосте нет сервера баз данных, то удаляем все строки (кроме первой «<?php») и пишем следующее:

/* External Server #1 */
 $i++;
 $cfg['Servers'][$i]['verbose'] = 'Server Name';
 $cfg['Servers'][$i]['host'] = '10.10.1.10';
 $cfg['Servers'][$i]['connect_type'] = 'tcp';
 $cfg['Servers'][$i]['extension'] = 'mysqli';
 $cfg['Servers'][$i]['auth_type'] = 'cookie';
 $cfg['Servers'][$i]['AllowNoPassword'] = false;

Вместо Server Name вписываем что угодно. Сохраняем и закрываем файл.

Конвертирование базы из postgresql в mysql

git clone https://github.com/ChrisLundquist/pg2mysql.git 
cd pg2mysql
  • сохраняем дамп из postgresql (пример сохранение всех таблиц для wordpress - wp*)
sudo -u postgres pg_dump --quote-all-identifiers --no-acl --no-owner --table=wp_* --format p --data-only wordpress -f wordpress_pgsql.sql
  • конвертируем в формат mysql
php pg2mysql_cli.php worpress_pgsql.sql wordpress_mysql.sql
  • теперь необходимо заменить все таблицы с `"public"."wp_*"` на 'wp_*` это можно сделать в редакторе по F4
  • не забудьте исправить "` ( на '(
  • теперь меняем sql команду с INSERT на REPLACE так же по F4
  • все, дамп можно заливать в базу, предварительно создайте из wordpress начальную структуру таблиц через install и потом вносите данные.


ИСТОЧНИКИ



ПОЛЕЗНОЕ: