Восстановить экспериментальные исходные коды MySQL 5.6 из экспериментальных на wheezy легко, почти тривиально. Однако вам потребуется много места на диске; после завершения сборки каталог сборки использовал 5,2 ГБ. Кроме того, для сборки требуется время и выполняется невероятное количество тестов. Я не стал рассчитывать время, но выделил пару часов. Можно отключить тесты, но я предлагаю дать им возможность запускаться - это безвредно, если они проходят. Они сделали это на моей машине. Хорошая новость в том, что я смог без проблем собрать и установить его. Я провел следующий базовый тест.
faheem@orwell:~$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 50
Server version: 5.6.16-1~exp1 (Debian)
Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
Итак, я могу хотя бы подключиться к серверу. Вот как выглядят установленные пакеты:
$ dpkg -l | grep mysql
ii libdbd-mysql-perl 4.021-1+b1 amd64 Perl5 database interface to the MySQL database
ii libmysqlclient18:amd64 5.5.35+dfsg-0+wheezy1 amd64 MySQL database client library
ii libqt4-sql-mysql:amd64 4:4.8.2+dfsg-11 amd64 Qt 4 MySQL database driver
ii mysql-client-5.6 5.6.16-1~exp1 amd64 MySQL database client binaries
ii mysql-client-core-5.6 5.6.16-1~exp1 amd64 MySQL database core client binaries
ii mysql-common 5.5.35+dfsg-0+wheezy1 all MySQL database common files, e.g. /etc/mysql/my.cnf
ii mysql-common-5.6 5.6.16-1~exp1 all MySQL 5.6 specific common files, e.g. /etc/mysql/conf.d/my-5.6.cnf
ii mysql-server-5.6 5.6.16-1~exp1 amd64 MySQL database server binaries and system database setup
ii mysql-server-core-5.6 5.6.16-1~exp1 amd64 MySQL database server binaries
ii python-mysqldb 1.2.3-2 amd64 Python interface to MySQL
Вот разбивка шагов.
Во-первых, найдите источники. Вам необходимо добавить следующее (или подобное,
с учетом предпочтительного сервера) в /etc/apt/sources.list
:
deb-src http: //debian.lcs .mit.edu / debian / experimental main non-free contrib
Также добавьте следующее в / etc / apt / preferences
.
Пакет: *
PIN-код: выпуск a = экспериментальный
Pin-Priority: 1
Затем запустите
apt-get update
Затем запустите
apt-get source mysql-5.6
в каком-нибудь подходящем каталоге. Обычно я создаю каталог в / usr / local / src
,
в этом случае, скажем, / usr / local / src / mysql
.
Затем перейдите в / usr / local / src / mysql
.
Запустите
sudo apt-get build-dep mysql-5.6
На моем компьютере была установлена пара пакетов.
Установите несколько базовых пакетов для сборки.
apt-get install build-essential devscripts fakeroot
Затем перейдите в каталог с исходным кодом /usr/local/src/mysql/mysql-5.6 -
5.6. 16
и запустите
debuild -uc -us
Сборка займет некоторое время. В некоторых случаях рекомендуется увеличивать
номер версии на единицу, но здесь в этом нет необходимости. поскольку маловероятно, что
какой-либо другой пакет MySQL 5.6 попадет в хриплый язык.
Если вы не хотите запускать тесты, вы можете вместо этого использовать
DEB_BUILD_OPTIONS = "nocheck" debuild -uc -us
Теперь вы должны установить libdbd- mysql-perl, который является зависимостью от пакетов mysql во время выполнения.
apt-get install libdbd-mysql-perl
Затем перейдите на один уровень вверх до / usr / local / src / mysql
. Там должно быть несколько пакетов deb
. Вам нужно установить как минимум
mysql-client-core-5.6_5.6.16-1 ~ exp1_amd64.deb
mysql-common-5.6_5.6.16-1 ~ exp1_all.deb {{1} } mysql-server-5.6_5.6.16-1 ~ exp1_amd64.deb
mysql-client-5.6_5.6.16-1 ~ exp1_amd64.deb
mysql-server-core-5.6_5.6.16- 1 ~ exp1_amd64.deb
Это можно сделать, например, запустив:
dpkg -i mysql-client-core-5.6_5.6.16-1 ~ exp1_amd64.deb
mysql -common-5.6_5.6.16-1 ~ exp1_all.deb
mysql-server-5.6_5.6.16-1 ~ exp1_amd64.deb
mysql-client-5.6_5.6.16-1 ~ exp1_amd64. deb
mysql-server-core-5.6_5.6.16-1 ~ exp1_amd64.deb
$foo
не является массивом; это строка, содержащая несколько слов, разделенных пробелом -. Если вы хотите, чтобы это был массив, назначьте его как один:
foo=( $(grep 'select' file.txt | tail -n 1) )
Теперь вы можете ссылаться на ${foo[0]}
или первые три элемента как ${foo[@]:0:3}
.
Обратите внимание, что ${foo[@]}
будет содержать все пять элементов из вашей последней совпадающей строки, поскольку здесь нет ничего, что могло бы извлечь только первые три элемента. Вы можете использовать foo=("${foo[@]:0:3}")
, чтобы сократить ${foo[@]}
до нужного размера, если хотите.
В качестве альтернативы,если вы хотите создать массив только из первых трех элементов, вы можете использовать awk
вот так:
foo=( $(awk '/select/ { a=$1; b=$2; c=$3 } END { print a,b,c }' file.txt) )
Это позволяет избежать чтения данных в переменные:
$ grep -F select file | tail -n 1 | cut -d ' ' -f 1-3
0.47331 5.11188 13.1615
Чтобы получить значения в массив в bash
, используйтеmapfile
(илиreadarray
):
$ mapfile -t arr < <( grep -F select file | tail -n 1 | cut -d ' ' -f 1-3 | tr ' ' '\n' )
$ printf 'arr: %s\n' "${arr[@]}"
arr: 0.47331
arr: 5.11188
arr: 13.1615
Я использую tr
, чтобы заменить пробелы между числами символами новой строки. Таким образом, я не получаю завершающий символ новой строки в конце последнего значения в массиве.
Вместо неудобного конвейера grep
+ tail
+ cut
+ tr
вы, очевидно, могли бы использовать
awk '/select/ { a=$1; b=$2; c=$3 } END { printf("%s\n%s\n%s\n", a, b, c) }'
или что-то подобное внутри подстановки процесса <(...)
.