Saya memiliki 3 node MariaDB. Ingin mengkonfigurasi cluster. Ditentukan dalam gcomm:// di my.cnf ips dari semua anggota dalam cluster menurut this.
Dan menambahkan ?pc.wait_prim=no
pada saat itu di gcomm://ip1,ip2,ip3
Kemudian proses mysqld dimulai pada setiap VM, tetapi ketika saya mencoba menghubungkannya dengan mysql -uroot -ppass untuk menjalankan
SET GLOBAL wsrep_provider_options="pc.bootstrap=1";
kesalahan muncul:
Tidak dapat terhubung ke server MySQL lokal melalui soket '/var/run/mysqld/mysqld.sock' (2 "Tidak ada file atau direktori seperti itu")
error.log dari setiap proses menunjukkan:
2018-02-01 15:13:23 140529975699392 [Note] WSREP: gcomm: connecting to group 'my_wsrep_cluster', peer '10.0.0.42:,10.0.0.44:,10.0.0.43:'
2018-02-01 15:13:23 140529975699392 [Note] WSREP: (71d7b5ed, 'tcp://0.0.0.0:4567') connection established to 71d7b5ed tcp://10.0.0.44:45
2018-02-01 15:13:23 140529975699392 [Warning] WSREP: (71d7b5ed, 'tcp://0.0.0.0:4567') address 'tcp://10.0.0.44:4567' points to own listeddress, blacklisting
2018-02-01 15:13:23 140529975699392 [Note] WSREP: (71d7b5ed, 'tcp://0.0.0.0:4567') connection established to 6ac0d002 tcp://10.0.0.42:45
2018-02-01 15:13:23 140529975699392 [Note] WSREP: (71d7b5ed, 'tcp://0.0.0.0:4567') turning message relay requesting on, nonlive peers:
2018-02-01 15:13:23 140529975699392 [Note] WSREP: (71d7b5ed, 'tcp://0.0.0.0:4567') connection established to 6bd1b1f9 tcp://10.0.0.43:45
2018-02-01 15:13:23 140529975699392 [Note] WSREP: gcomm: connected
2018-02-01 15:13:23 140529975699392 [Note] WSREP: Changing maximum packet size to 64500, resulting msg size: 32636
2018-02-01 15:13:23 140529975699392 [Note] WSREP: Shifting CLOSED -> OPEN (TO: 0)
2018-02-01 15:13:23 140529975699392 [Note] WSREP: Opened channel 'my_wsrep_cluster'
2018-02-01 15:13:23 140529975699392 [Note] WSREP: Waiting for SST to complete.
2018-02-01 15:13:23 140529635424000 [Note] WSREP: declaring 6ac0d002 at tcp://10.0.0.42:4567 stable
2018-02-01 15:13:23 140529635424000 [Note] WSREP: declaring 6bd1b1f9 at tcp://10.0.0.43:4567 stable
2018-02-01 15:13:23 140529635424000 [Warning] WSREP: no nodes coming from prim view, prim not possible
2018-02-01 15:13:23 140529635424000 [Note] WSREP: view(view_id(NON_PRIM,6ac0d002,2) memb {
6ac0d002,0
6bd1b1f9,0
71d7b5ed,0
} joined {
} left {
} partitioned {
})
2018-02-01 15:13:23 140529627031296 [Note] WSREP: New COMPONENT: primary = no, bootstrap = no, my_idx = 2, memb_num = 3
2018-02-01 15:13:23 140529627031296 [Note] WSREP: Flow-control interval: [28, 28]
2018-02-01 15:13:23 140529627031296 [Note] WSREP: Trying to continue unpaused monitor
2018-02-01 15:13:23 140529627031296 [Note] WSREP: Received NON-PRIMARY.
2018-02-01 15:13:23 140529975253760 [Note] WSREP: New cluster view: global state: :-1, view# -1: non-Primary, number of nodes: 3, my ind protocol version -1
2018-02-01 15:13:23 140529975253760 [Note] WSREP: wsrep_notify_cmd is not defined, skipping notification.
2018-02-01 15:13:26 140529635424000 [Note] WSREP: (71d7b5ed, 'tcp://0.0.0.0:4567') connection to peer 71d7b5ed with addr tcp://10.0.0.44timed out, no messages seen in PT3S
2018-02-01 15:13:26 140529635424000 [Note] WSREP: (71d7b5ed, 'tcp://0.0.0.0:4567') turning message relay requesting off
Mengapa hal itu terjadi dan apa yang salah?
Periksa berkas konfigurasi Anda /etc/my.cnf
dan /etc/my.cnf.d/server.cnf
dan cari parameter soket. Pastikan itu sama untuk klien dan server. Tempat yang baik untuk parameter soket adalah di bagian [client-server] pada /etc/my.cnf
. File soket dibuat oleh server MariaDB saat memulai.
Perhatikan bahwa ada tempat lain di mana berkas konfigurasi MariaDB dapat berada, dan ini berpotensi mengganti pengaturan Anda dalam dua berkas yang disebutkan di atas. Untuk lebih jelasnya, lihat halaman ini di MariaDB KB.
Perhatikan juga bahwa Anda mungkin dapat terhubung ke MariaDB melalui TCP dan bukan melalui soket. Anda dapat menentukan bahwa Anda ingin menggunakan TCP daripada soket dengan mysql ... --protocol=TCP
. Jika berhasil, Anda dapat melakukan SHOW VARIABLES LIKE 'socket';
untuk mengetahui di mana file socket sebenarnya (atau seharusnya). Anda kemudian dapat terhubung dengan mysql ... --socket=/path/to/file.sock
atau mengedit file konfigurasi sehingga klien membacanya dengan benar dari sana.
Dalam beberapa kasus, Anda mungkin juga dapat mengetahui lokasi berkas soket yang digunakan dengan mencantumkan proses: ps -ef | grep mysql
yang dapat menghasilkan sesuatu seperti
root 23900 1 0 13:27 ? 00:00:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --pid-file=/var/lib/mysql/vserv-03.pid
mysql 24402 23900 0 13:27 ? 00:00:50 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --wsrep_on=ON --wsrep_provider=/usr/lib64/galera/libgalera_smm.so --log-error=/var/lib/mysql/vserv-03.err --open-files-limit=65535 --pid-file=/var/lib/mysql/vserv-03.pid --socket=/var/lib/mysql/mysql.sock --wsrep_start_position=98b22222-aa16-1114-ba1a-886633c6b8eb:55133333
Seperti yang dapat Anda lihat di sini (gulir ke kanan), ini menggunakan soket di /var/lib/mysql/mysql.sock
.
EDIT: Cara yang sangat bagus untuk menemukan lokasi file soket adalah:
netstat -ln | grep mysql
unix 2 [ ACC ] STREAM LISTENING 22418 /var/lib/mysql/mysql.sock
Terjadi pada saya setelah reboot...
File soket tidak dapat ditemukan di mana pun. Dalam kasus saya, seharusnya ada di:
/var/run/mysqld/mysqld.sock
Dalam kasus saya, saya memperbaikinya dengan melakukan:
apt-get update
apt-get upgrade
Setelah langkah-langkah ini, soket muncul di direktori mysqld dan saya dapat memulai mysql (mariaDB).