Instalacja bazy MySQL w Linux

Przed instalacją bazy MySQL na serwerze Linux ściągamy ze strony :
https://dev.mysql.com/downloads/mysql/5.7.html
paczki instalacyjne (RPM)
mysql-community-client-xxxxx.x86_64.rpm
mysql-community-common-xxxxx.x86_64.rpm
mysql-community-libs-xxxxx.x86_64.rpm
mysql-community-libs-compat-xxxxx.x86_64.rpm
mysql-community-server-xxxxx.x86_64.rpm
mysql-community-server-minimal-xxxxx.x86_64.rpm

Dodajemy grupę MYSQL i usera MYSQL:
groupadd mysql
useradd -g mysql mysql
passwd mysql

Changing password for user mysql.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.

Rozłożenie plików bedzie takie:
na filesystemie: /mysqldata/baza/data : tu pliki my.cnf,pid,socket
dane InnoDB i mysisam są w oddzielnych podkatalogach w /mysqldata

Tworzymy strukturę katalogów niezbędną dla instalacji (można puścić domyślną ale warto oddzielić binaria od plików baz):
mkdir -p /mysql/instalki
mkdir -p /mysql/5717
mkdir -p /mysqldata/log/innodb
mkdir -p /mysqldata/data/data
mkdir -p /mysqldata/data/innodb
mkdir -p /mysqldata/InnoDB
mkdir -p /mysqldata/tmp

Z poziomu roota dodajemy uprawnienia do filerów dla usera MYSQL:

chown -R mysql:mysql /mysqldata
chown -R mysql:mysql /mysql

Ustawiamy zmienną BASEDIR
BASEDIR=/mysql/5717
export BASEDIR

Sprawdzamy

[root@localhost ~]# env | grep BASE

BASEDIR=/mysql/5717

Do folderu /mysql/instalki wrzucamy ściągnięte pliki
czyli dla wersji MySQL 5.7 na system 64 bitowy:
mysql-community-common-5.7.17-1.el7.x86_64.rpm
mysql-community-libs-5.7.17-1.el7.x86_64.rpm
mysql-community-libs-5.7.17-1.el7.x86_64.rpm
mysql-community-libs-compat-5.7.17-1.el7.x86_64.rpm
mysql-community-client-5.7.17-1.el7.x86_64.rpm
mysql-community-server-5.7.17-1.el7.x86_64.rpm

Instalację paczek RPM wykonujemy z roota
Uwaga! Przed instalacją rpmów Mysql trzeba usunąć zainstalowane rpmy Mariadb bo konfliktują się z rpmami mysql
Sprawdzanie czy są rpmy mariadb:
rpm -qa |grep -i maria
Usunięcie konkretnego rpm, np:
rpm -e mariadb-libs-5.5.44-2.el7.x86_64

Instalacja RPM (uwaga!!! ważna kolejność) z usera ROOT:
cd /mysql/instalki
[root@localhost instalki]# rpm -ivh --noscripts --replacefiles --badreloc --relocate /usr=$BASEDIR --relocate /etc=$BASEDIR/etc mysql-community-common-5.7.17-1.el7.x86_64.rpm

warning: mysql-community-common-5.7.17-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
Preparing...                                                            (################################# [100%]
Updating / installing...
   1:mysql-community-common-5.7.17-1.e                                  (################################# [100%]

[root@localhost instalki]# rpm -ivh --noscripts --replacefiles --badreloc --relocate /usr=$BASEDIR --relocate /etc=$BASEDIR/etc mysql-community-libs-5.7.17-1.el7.x86_64.rpm

warning: mysql-community-libs-5.7.17-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
Preparing...                                                            (################################# [100%]
Updating / installing...
   1:mysql-community-libs-5.7.17-1.el7                                  (################################# [100%]

[root@localhost instalki]# rpm -ivh --noscripts --replacefiles --badreloc --relocate /usr=$BASEDIR --relocate /etc=$BASEDIR/etc mysql-community-libs-compat-5.7.17-1.el7.x86_64.rpm

warning: mysql-community-libs-compat-5.7.17-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
Preparing...                                                            (################################# [100%]
Updating / installing...
   1:mysql-community-libs-compat-5.7.1                                  (################################# [100%]

[root@localhost instalki]# rpm -ivh --noscripts --replacefiles --badreloc --relocate /usr=$BASEDIR --relocate /etc=$BASEDIR/etc mysql-community-client-5.7.17-1.el7.x86_64.rpm

warning: mysql-community-client-5.7.17-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
Preparing...                                                            (################################# [100%]
Updating / installing...
   1:mysql-community-client-5.7.17-1.e                                  (################################# [100%]

[root@localhost instalki]# rpm -ivh --noscripts --replacefiles --badreloc --relocate /usr=$BASEDIR --relocate /etc=$BASEDIR/etc mysql-community-server-5.7.17-1.el7.x86_64.rpm

warning: mysql-community-server-5.7.17-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
error: Failed dependencies:
/usr/bin/perl is needed by mysql-community-server-5.7.17-1.el7.x86_64
net-tools is needed by mysql-community-server-5.7.17-1.el7.x86_64
perl(Getopt::Long) is needed by mysql-community-server-5.7.17-1.el7.x86_64
perl(strict) is needed by mysql-community-server-5.7.17-1.el7.x86_64

Brakuje dwóch bibliotek
mount /dev/cdrom /mnt/cdrom
yum install perl
yum install net-tools

rpm -ivh --noscripts --replacefiles --badreloc --relocate /usr=$BASEDIR --relocate /etc=$BASEDIR/etc mysql-community-server-5.7.17-1.el7.x86_64.rpm

warning: mysql-community-server-5.7.17-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
Preparing...                                                            (################################# [100%]
Updating / installing...
   1:mysql-community-server-5.7.17-1.e                                  (################################# [100%]

Podobno czasami czegoś brakuje w serwerze i pomaga instalacja paczki mysql-community-server-minimal-5.7.17-1.el7.x86_64.rpm

Jakbyśmy chcieli usunąć RPM-a używamy polecenia
[root@localhost install]# rpm -e mysql-community-server-5.7.17-1.el5
Jeśli zwróci komunikat:

error reading information on service mysqld: No such file or directory
error: %preun(mysql-community-server-5.7.17-1.el5.x86_64) scriptlet failed, exit status 1


to trzeba usuwać z opcją –noscripts

rpm -e mysql-community-server-5.7.17-1.el5 –noscripts

Przelogowujemy się na użytkownika MYSQL i resztę wykonujemy z tego użytkownika
Na początek dodajemy na końcu pliku do .bash_profile wpisy dla mysql

#####  MySql #####

MYSQL_HOME=/mysqldata/data
export MYSQL_HOME
PATH=$PATH:/mysql/5717/bin:/mysql/5717/sbin
export PATH

Przelogowyjemy się, żeby zaczytał zmienne

W folderze /mysqldata/data/ przygotowujemy plik konfiguracyjny my.cnf (według poniższego wzorca)
W my.cnf zmieniamy wszystkie ścieżki do plików (logów, binariów, socketów itd) oraz bind-address (tu ma być nazwa serwera bo to jest tak jak konfiguracja listenera w Oraclu dla połączeń zdalnych)

[client]
port=3306
socket=/mysqldata/data/baza_mysql.sock

[mysqld]
#ze starego serwera baza_bledow

#old_passwords=1
#wait_timeout=100
#max_connections=3000
#key_buffer_size = 16M
#read_buffer_size = 2M
#bulk_insert_buffer_size = 64M
#myisam_sort_buffer_size = 128M

#wait_timeout=31536000
#max_allowed_packet=16M
#bind-address=127.0.0.1
bind-address=localhost.localdomain
#bind-address=126.185.100.83
#bind-address=localhost
port=3306
socket=/mysqldata/data/baza_mysql.sock
datadir=/mysqldata/data/data
basedir=/mysql/5717
tmpdir=/mysqldata/tmp
#long_query_time=30
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
server-id=1
innodb_buffer_pool_size = 128M
join_buffer_size = 128M
sort_buffer_size = 2M
read_rnd_buffer_size = 2M
innodb_file_per_table
innodb_data_file_path=ibdata1.tbs:90M:autoextend
innodb-data-home-dir=/mysqldata/data/innodb
innodb_log_files_in_group=3
innodb-log-group-home-dir=/mysqldata/log/innodb
#innodb-log-group-home-dir=/mysqldata/data/innodb/log
log-error=/mysqldata/data/baza_mysql.log
pid-file=/mysqldata/data/baza_mysql.pid
character-set-server=cp1250
event_scheduler = ON

W sekcji #BIND definiujemy na jakim adresie baza ma nasłuchiwać.
Wpisując
#bind-address=127.0.0.1
#bind-address=localhost.localdomain
bind-address=166.155.10.113
#bind-address=localhost

ustawiamy by baza nasłuchiwała tylko na adresie IP (w przykładzie 166.155.10.113). Jeśli chcielibyśmy by nasłuchiwała na wszystkich czterech adresach należy zahashowac (#) wszystkie cztery wpisy.

Tworzenie instancji (od wersji 5.7) :
mysqld --defaults-file=/mysqldata/data/my.cnf --initialize --user=mysql

Jakby coś było nie tak sprawdzamy w pliku logu w /mysqldata/data/baza_mysql.log

[mysql@localhost data]$ less /mysqldata/data/baza_mysql.log

2017-04-11T18:19:36.759259Z 0 [Warning] Changed limits: max_open_files: 1024 (requested 5000)
2017-04-11T18:19:36.759390Z 0 [Warning] Changed limits: table_open_cache: 431 (requested 2000)
2017-04-11T18:19:36.759573Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2017-04-11T18:19:36.759585Z 0 [Warning] 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release.
2017-04-11T18:19:36.759588Z 0 [Warning] 'NO_AUTO_CREATE_USER' sql mode was not set.
2017-04-11T18:19:37.833580Z 0 [Warning] InnoDB: New log files created, LSN=45790
2017-04-11T18:19:37.927544Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2017-04-11T18:19:38.009481Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 6c37ca14-1ee3-11e7-b893-0800276362ff.
2017-04-11T18:19:38.014252Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2017-04-11T18:19:38.015780Z 1 [Note] A temporary password is generated for root@localhost: (O53>#Wk;2qn

Jeśli instancja poprawnie się utworzyła to w ostatniej linii będzie podane tymczasowe hasło do bazy dla użytkownika ROOT.

Uruchomiamy bazę mysql
/mysql/5717/sbin/mysqld --defaults-file=/mysqldata/data/my.cnf &

Jakbyśmy chwili ją położyć to wykonujemy to poleceniem
export MYSQL_HOME=/mysqldata/data
/mysql/5717/bin/mysqladmin shutdown -u root -p

Oczywiście sprawdzamy w logu czy wszystko ładnie wstało:

tail -f /mysqldata/data/baza_mysql.log

Proces bazy już działa
[mysql@localhost ~]$ ps -ef | grep myssqld

. . .
mysql    11679 11461 11 15:39 pts/1    00:00:00 /mysql/5717/sbin/mysqld --defaults-file=/mysqldata/data/my.cnf
. . .

Tymczasowe hasło konta root do bazy jest w pliku LOG
grep 'temporary password' /mysqldata/data/baza_mysql.log

2017-04-10T14:15:53.679374Z 1 [Note] A temporary password is generated for root@localhost: (O53>#Wk;2qn

Sprawdzamy jeszcze czy zmienne systemowe zostały wczytane:
[mysql@localhost ~]$ env | grep my

USER=mysql
MAIL=/var/spool/mail/mysql
PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/mysql/.local/bin:/home/mysql/bin:/mysql/5717/bin:/mysql/5717/sbin
PWD=/home/mysql
HOME=/home/mysql
LOGNAME=mysql
MYSQL_HOME=/mysqldata/data

Logujemy się do bazy mysql
mysql –u root –p

Zmieniamy hasło inaczej nie będziemy mogli wykonać żadnej operacji
mysql> listshow databases;

ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

ALTER USER root@localhost identified by 'mysql';

Query OK, 0 rows affected (0.00 sec)

mysql> show databases;

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

Teraz pozostaje nam wykreować swoją bazę:
CREATE DATABASE test1 CHARACTER SET utf8 COLLATE utf8_polish_ci;

Utworzyć użytkowników:
można podejrzeć jak to zrobić w innej bazie wydając polecenie:

show grants for user@'host';
select User,authentication_string,host from mysql.user;

create user 'adam'@'172.19.5.%' identified by 'MerryChristmas';
grant all privileges on nms.* to 'adam'@'172.19.5.%';
grant all privileges on nms.* to 'adam'@'localhost';

Na koniec po zakończeniu prac można wyłączyć bazę:
/mysql/5715/bin/mysqladmin shutdown -uroot -p

Warto dla ułatwienia sobie pracy stworzyć w folderze /mariadb/dba/scripts
dwa skrypty start_maria.sh oraz stop_maria.sh w których zapiszemy powyższe polecenia do uruchamiania i zatrzymywania bazy

START: /mysql/5717/sbin/mysqld --defaults-file=/mysqldata/data/my.cnf &

STOP: export MYSQL_HOME=/mysqldata/db1/data
/mysql/5715/bin/mysqladmin shutdown -uroot -p root

Tu mamy jeszcze jakiś skrypt do uruchamiania bazy (do sprawdzenia)

export MYSQL_HOME=/mysqldata/db1/data
FILE="$MYSQL_HOME/$HOSTNAME.pid"
#/mysql/5716/bin/mysqld_safe --defaults-file=/mysqldata/nms/data/my.cnf &
/mysql/5716/sbin/mysqld --defaults-file=/mysqldata/nms/data/my.cnf &
#
# czekamy, az pojawi sie PID
#
TIME=20

while ! test -f $FILE; do
sleep 1;
let TIME=TIME-1;
if [ $TIME -eq 0 ]; then
echo "Timeout ";
exit 1;
fi
done
PID=`cat $FILE`
echo "Mysql uruchomiony z PID=$PID";

Ten wpis został opublikowany w kategorii MySQL (MariaDB) i oznaczony tagami . Dodaj zakładkę do bezpośredniego odnośnika.

Dodaj komentarz