Перенос одной базы данных MySql на отдельный физический диск

В сценарии python:

Прагматическое решение

В случае, если это одноразовая работа, характерная для одной ситуации, следующие работы:

[ f1]

Выход:

Neeraj:149:neeraj@xyz.com
Rahul:148:rahul@gmail.com
Tarun:143:tarun@gmail.com

Или, если вы хотите сохранить вывод непосредственно в файл:

#!/usr/bin/env python3

with open(file1) as names:
    names = sorted(names.readlines())
with open(file2) as data:
    data = data.readlines()
with open(file3, "wt") as output:
    for i in names:
        output.write(i.replace("\n", "")+str([d[d.find(":"):].replace("\n", "") for d in data if d.startswith(i.split(":")[0])][0])+"\n")

Как вы, вероятно, знаете, скопируйте сценарий в пустым файлом, установите путь к файлу 1-2 (3) (между кавычками), сохраните его как combine.py, запустите его командой:

python3 /path/to/combine.py

Прагматическое решение

Глядя на два файла, мы имеем дело с базами данных, причем первое поле является ключевым. Следующий сценарий более гибкий и охватывает более гибкий способ создания отчетов о двух файлах (например, в ситуациях), где у нас будет больше полей, чем здесь.

Если мы добавим extra («characterizing») ко второму файлу:

Neeraj:neeraj@xyz.com:Loves to Cook
Rahul:rahul@gmail.com:Collects empty bottles
Tarun:tarun@gmail.com:Weares his glasses upside down

Мы могли бы захотеть добавить описание вместо адреса электронной почты или и то, и другое. Это потребует сценарий вроде:

#!/usr/bin/env python3

db1 = "/path/to/file1"; db2 = "/path/to/file2"

with open(db1) as data1:
    rc = [l.replace("\n", "").split(":") for l in data1.readlines()]

with open(db2) as data2:
    records2 = [l.replace("\n", "").split(":") for l in data2.readlines()]

uniques = sorted(set(item[0] for item in rc)) # find keys
report = []

for i in uniques:
    database_1 = [r for r in rc if r[0] == i][0]
    database_2 = [r for r in records2 if r[0] == i][0]
    # -----------------------------------------------------------------------
    # set the required fields for report here:
    new_record = i, database_1[1], database_2[1]
    # -----------------------------------------------------------------------
    report.append((":").join(new_record))

for item in report:
    print(item)

Результат

Если мы установим:

new_record = i, database_1[1], database_2[2]

Результат:

Neeraj:149:Loves to Cook
Rahul:148:Collects empty bottles
Tarun:143:Weares his glasses upside down

Но если мы установим:

new_record = i, database_1[1], database_2[1]

Результат:

Neeraj:149:neeraj@xyz.com
Rahul:148:rahul@gmail.com
Tarun:143:tarun@gmail.com

И если мы установим:

new_record = i, database_1[1], database_2[1], database_2[2]

Результат есть:

Neeraj:149:neeraj@xyz.com:Loves to Cook
Rahul:148:rahul@gmail.com:Collects empty bottles
Tarun:143:tarun@gmail.com:Weares his glasses upside down
4
задан 22 December 2017 в 01:08

6 ответов

Исправлено это!

Проблема заключалась в записи apparmor:

/path/to/new/location/ r,
/path/to/new/location/** rwk,

на самом деле нужно было быть одним каталогом из того, что было:

/path/to/new/ r,
/path/to/new/** rwk,
3
ответ дан 22 May 2018 в 16:55

Исправлено это!

Проблема заключалась в записи apparmor:

/path/to/new/location/ r, /path/to/new/location/** rwk,

на самом деле нужно было быть одним каталогом из того, что было:

/path/to/new/ r, /path/to/new/** rwk,
3
ответ дан 18 July 2018 в 00:54

Исправлено это!

Проблема заключалась в записи apparmor:

/path/to/new/location/ r, /path/to/new/location/** rwk,

на самом деле нужно было быть одним каталогом из того, что было:

/path/to/new/ r, /path/to/new/** rwk,
3
ответ дан 24 July 2018 в 17:18

Вы можете попробовать эту вариацию:

1) first check in my.cnf [/etc/mysql/my.cnf] for database files destination.

2) let say that destination is in folder /var/lib/mysql/ and yours database name is "abccompany"

3) stop mysql database

4) move folder [var/lib/mysql/abccompany] to new destination (let say "/diskY")

5) make symbolic link:
     ln  -s  /diskY/abccompany   abccompany

6) start mysql database and everything should work just fine.
0
ответ дан 22 May 2018 в 16:55

Вы можете попробовать эту вариацию:

1) first check in my.cnf [/etc/mysql/my.cnf] for database files destination. 2) let say that destination is in folder /var/lib/mysql/ and yours database name is "abccompany" 3) stop mysql database 4) move folder [var/lib/mysql/abccompany] to new destination (let say "/diskY") 5) make symbolic link: ln -s /diskY/abccompany abccompany 6) start mysql database and everything should work just fine.
0
ответ дан 18 July 2018 в 00:54

Вы можете попробовать эту вариацию:

1) first check in my.cnf [/etc/mysql/my.cnf] for database files destination. 2) let say that destination is in folder /var/lib/mysql/ and yours database name is "abccompany" 3) stop mysql database 4) move folder [var/lib/mysql/abccompany] to new destination (let say "/diskY") 5) make symbolic link: ln -s /diskY/abccompany abccompany 6) start mysql database and everything should work just fine.
0
ответ дан 24 July 2018 в 17:18

Другие вопросы по тегам:

Похожие вопросы: