Note, that this recipe is not updated long time and could be outdated!
Got it.

MySQL datubāze

Should prepare further:  MySQL skaņošana

Saturs

Uzstādīšana

Uzstāda mysql serveri:

sudo apt-get install mysql-server

Produkcijas serverim

Prododukcijas serverim ir svarīgi pārliecināties, ka tajā nav viegli uzlaužamu ievainojamību sliktu iestatījumu dēļ. Par drošiem iestatījumiem pārliecinās, palaižot papildu pakotnes uzstādīšanu:

sudo mysql_secure_installation

Iestatīšana

Visu saskarņu klausīšanās

  1. Drošības nolūkos, pēc noklusēšanas, mysql serveris klausās un atbild tikai uz localhost, un, lai tam pieslēgtos attālināti, jāizmanto SSH tunelis.
  2. Izstrādes un testa vidē, kas atrodas aizsargātā lokālā tīklā, serveri var iestatīt, lai tas klausās visas tīkla saskarnes. Kā root lietotājs failā /etc/mysql/conf.d/mysql.cnf izmaina rindu:

    [mysqld]
    # bind-address = 127.0.0.1
    bind-address = 0.0.0.0
    un pārstartē serveri.

UTF atbalsts

  1. Lai arī parasti mysql izmanto UTF pēc noklusēšanas, drošībai UTF-8 atbalstu var norādīt tieši.
  2. Rediģē failu /etc/mysql/conf.d/mysql.cnf un atbilstošajās sadaļās (zem [client] un [mysqld]) pievieno dažas jaunas rindas:

    ...
    [client]
    default-character-set = utf8
    ...
    [mysqld]
    character-set-server = utf8
    collation-server = utf8_general_ci
    ...

Neizmantojiet mysqld sadaļā default-character-set = utf8, tas ir novecojis iestatījums un tad serveris nepalaižas!

Pieprasījumu žurnalēšana

Neizmantojiet šo iespēju produkcijas sistēmās, jo tā var radīt lieku slodzi un palēlināt sistēmas darbību!

  1. Failā /etc/mysql/mysql.conf.d/mysqld.cnf sadaļā [mysqld] atkomentē (novāc restīti) vai pievieno rindas: 

    general_log_file        = /var/log/mysql/mysql.log
    general_log             = 1
  2. Pārstartē serveri, ievadot komandu sudo systemctl mysql restart
  3. Pārrauga žurnāla failu, ievadot komandu: tail -f /var/log/mysql/mysql.log 

Lietotāju pievienošana

  1. Izveido lietotāju student ar tiesībām pieslēgties no jebkuras vietas, konsolē izpildot komandu:

    CREATE USER 'admin'@'localhost' IDENTIFIED BY 'Student007';
  2. Ja vēlas, lietotājam piešķir administratora tiesības:

    GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost'
    FLUSH PRIVILEGES;
  3. Ja vēlas, lai lietotājs var veidot arī citus administratora lietotājus, komandu papildina šādi:

    GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;

Datu bāzes pārvietošana

Ja grib lai MySQL glabā datus /home mapē (piem., ja / sadaļā ir ierobežota diska vieta):

  1. Aptur MySQL:

    systemctl stop mysql
  2. Pārkopē /var/lib/mysql mapi uz /home, un (ērtībai) izveido saiti no sākotnējās vietas:

    mv /var/lib/mysql /home/
    ln -s /home/mysql /var/lib/mysql
  3. Izmaina apparmor iestatījumus. Failā /etc/apparmor.d/local/usr.sbin.mysqld pievieno rindas:

    # Allow to store database in /home/mysql
    /home/mysql/ r,
    /home/mysql/** rwk,
  4. Pārstartē apparmor:

    /etc/init.d/apparmor restart
  5. Palaiž MySQL:

    systemctl start mysql

Automātiskās palaišanas atcelšana

  • Ja datu bāzi izmanto reti un nav nepieciešams, lai tā palaistos automātiski, ieslēdzot datoru, tad kā root lietotājs failā /etc/init/mysql.conf izmaina rindu:

    ...
    #start on runlevel [2345]
    start on runlevel [345]
    ..

Lietošana

  1. Pieteikšanos ar MySQL workbench, skatīt MySQLWorkBench
  2. Pieteikšanās konsolē:

    mysql -uroot -p
    un uzaicinājumā ievada paroli.
  3. Uzstādīšanas pārbaude:

    show databases;

    parāda

    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    +--------------------+
  4. Datu bāzes izveide:

    create database test;
    use test;

Datu bāzes optimizēšana

  1. Ievada komandu:

    mysqlcheck -u root -pPasswd -o <databasename>
  2. MySQL konsolē ieraksta komandu exit, lai atgrieztos parastajā čaulas komandrindas režīmā.

Kā ierakstīt MySQL datubāzē datus?

  1. Piesakās kā root lietotājs (sk. augstāk), izveido datubāzi, tabulu un ieraksta tajā datus:

    create database mydatabase;
    use mydatabase;
    create table ttt (
      id INT NOT NULL AUTO_INCREMENT,
      val VARCHAR(255),
      PRIMARY KEY(id));
    show tables;
    insert into ttt VALUES (NULL, 'aaa');
    select * from ttt;

    Pēdējā rinda izvada tabulu:

    mysql> select * from ttt;
    +----+------+
    | id | val  |
    +----+------+
    |  1 | aaa  |
    +----+------+

Kļūdu novēršana

Kā pārliecināties, kas iet un kas neiet

  1. Piesakās kā root lietotājs:

    sudo su
  2. Pārlaiž mysql serveri:

    systemctl restart mysql

    Jāparādās rindai

    mysql start/running, process xxxx

    kur xxxx ir kaut kāds skaitlis, bet nākamajā rindā ir komandrindas uzaicinājums, kas beidzas ar <b>#</b> (t.i. dators ir ir gatavs saņemt nākamo komandu).

  3. Apskata, kas rakstīts žurnāla failos /var/log/syslog, /var/log/upstart/mysql.log Pievērš uzmanību pēdējām rindām, tām ir jābūt apmēram šādām:

    ...
    130304 19:47:03 InnoDB: 1.1.8 started; log sequence number 104677818
    130304 19:47:03 [Note] Server hostname (bind-address): '127.0.0.1'; port: 3306
    130304 19:47:03 [Note]   - '127.0.0.1' resolves to '127.0.0.1';
    130304 19:47:03 [Note] Server socket created on IP: '127.0.0.1'.
    130304 19:47:03 [Note] Event Scheduler: Loaded 0 events
    130304 19:47:03 [Note] /usr/sbin/mysqld: ready for connections.
    Version: '5.7.29-0ubuntu0.12.04.1'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  (Ubuntu)
    mysqld is alive
    ...
    Ja rāda kļūdas, pārkopē tās tīmekļa pārlūkprogrammas meklēšanas logā un cenšas atrast risinājumu.
  4. Meklē visus ar MySQL saistītos ziņojumus žurnālu failos, piemēram, ievadot komandas:

    cd /var/log
    grep -ri mysql *
  5. Pārliecinās, ka strādā mysql servera process:

    ps -efa|grep mysql

    kā vienai no rindām ir jābūt:

    ...
    mysql     1234     1  0 20:00 ?        00:00:00 /usr/sbin/mysqld
    ...
  6. Pārliecinās, ka mysql serveris klausās tīklu:

    netstat -ant|grep 3306

    kā vienai no rindām ir jābūt:

    tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN

Ja Mysql nestartējas

  1. Izdzēš failus:

    cd /var/lib/mysql
    sudo rm ibdata1
    sudo rm ib_logfile0
    sudo rm ib_logfile1
  2. Pārstata iestatījumu failus:

    mysqld --initialize

Pēc pārstartēšanas paliek uzkāries mysqld-safe process

  1. Failā /etc/init.d/mysql izmaina rindas:

    # !!! due to mysqld-safe problem http://forum.slicehost.com/index.php?p=/discussion/1000/x
    # sanity_checks;

MySQL servera pārinstalēšana

sudo apt purge mysql-server* mysql-common
sudo rm -fr /etc/mysql/ /var/lib/mysql
sudo apt install --reinstall --fix-broken --fix-missing mysql-server

root lietotāja paroles atjaunošana ar SQL

UPDATE mysql.user SET authentication_string=PASSWORD('YOURNEWPASSWORD'), plugin='mysql_native_password' WHERE User='root' AND Host='%';
flush privileges;

Saites

Alternatīvas


  
Tags Linux Serveris Datubāze
Created by Valdis Vītoliņš on 2008-08-08 10:42
Last modified by Valdis Vītoliņš on 2021-04-19 16:35
 
Xwiki Powered
Creative Commons Attribution 3.0 Unported License