Hướng dẫn mysql client change socket location - ứng dụng khách mysql thay đổi vị trí ổ cắm

B.3.3.6 & nbsp; Cách bảo vệ hoặc thay đổi tệp ổ cắm UNIX MySQL

Vị trí mặc định cho tệp ổ cắm UNIX mà máy chủ sử dụng để liên lạc với máy khách cục bộ là /tmp/mysql.sock. (Đối với một số định dạng phân phối, thư mục có thể khác nhau, chẳng hạn như

[mysqld]
socket=/path/to/socket

[client]
socket=/path/to/socket
0 cho rpms.)

Trên một số phiên bản của Unix, bất kỳ ai cũng có thể xóa các tệp trong thư mục

[mysqld]
socket=/path/to/socket

[client]
socket=/path/to/socket
1 hoặc các thư mục tương tự khác được sử dụng cho các tệp tạm thời. Nếu tệp ổ cắm được đặt trong một thư mục như vậy trên hệ thống của bạn, điều này có thể gây ra vấn đề.

Trên hầu hết các phiên bản của Unix, bạn có thể bảo vệ thư mục

[mysqld]
socket=/path/to/socket

[client]
socket=/path/to/socket
1 của mình để các tệp chỉ có thể bị xóa bởi chủ sở hữu của họ hoặc Superuser (
[mysqld]
socket=/path/to/socket

[client]
socket=/path/to/socket
3). Để thực hiện việc này, hãy đặt bit
[mysqld]
socket=/path/to/socket

[client]
socket=/path/to/socket
4 trên thư mục
[mysqld]
socket=/path/to/socket

[client]
socket=/path/to/socket
1 bằng cách đăng nhập dưới dạng
[mysqld]
socket=/path/to/socket

[client]
socket=/path/to/socket
3 và sử dụng lệnh sau:

$> chmod +t /tmp

Bạn có thể kiểm tra xem bit

[mysqld]
socket=/path/to/socket

[client]
socket=/path/to/socket
4 được đặt bằng cách thực thi
[mysqld]
socket=/path/to/socket

[client]
socket=/path/to/socket
8. Nếu ký tự quyền cuối cùng là
[mysqld]
socket=/path/to/socket

[client]
socket=/path/to/socket
9, bit được đặt.

Một cách tiếp cận khác là thay đổi nơi máy chủ tạo tệp ổ cắm UNIX. Nếu bạn làm điều này, bạn cũng nên cho các chương trình khách hàng biết vị trí mới của tệp. Bạn có thể chỉ định vị trí tệp theo nhiều cách:

  • Chỉ định đường dẫn trong tệp tùy chọn toàn cầu hoặc cục bộ. Ví dụ: đặt các dòng sau vào

    $> mysqladmin --socket=/path/to/socket version
    0:

    [mysqld]
    socket=/path/to/socket
    
    [client]
    socket=/path/to/socket

    Xem Phần & NBSP; 4.2.2.2, Sử dụng các tệp tùy chọn.

  • Chỉ định tùy chọn

    $> mysqladmin --socket=/path/to/socket version
    1 trên dòng lệnh đến mysqld_safe và khi bạn chạy các chương trình khách.mysqld_safe and when you run client programs.

  • Đặt biến môi trường

    $> mysqladmin --socket=/path/to/socket version
    2 thành đường dẫn của tệp ổ cắm UNIX.

  • Tập hợp lại MySQL từ nguồn để sử dụng vị trí tệp UNIX mặc định khác nhau. Xác định đường dẫn đến tệp với tùy chọn

    $> mysqladmin --socket=/path/to/socket version
    3 khi bạn chạy CMake. Xem Phần & NBSP; 2.9.7, Tùy chọn cấu hình nguồn MySQL của MySQL.CMake. See Section 2.9.7, “MySQL Source-Configuration Options”.

Bạn có thể kiểm tra xem vị trí ổ cắm mới có hoạt động hay không bằng cách cố gắng kết nối với máy chủ với lệnh này:

$> mysqladmin --socket=/path/to/socket version


Đã hỏi 10 năm, 9 tháng trước 10 years, 9 months ago

Đã xem 20k lần 20k times

Tôi có vấn đề kỳ lạ này sau khi thay đổi vị trí Datadir MySQL từ mặc định "/var/lib/mysql" Nó đã hoạt động ngày hôm qua, nhưng hôm nay tôi nhận được "không thể kết nối với máy chủ mysql cục bộ thông qua ổ cắm '/var/lib/mysql/mysql .Sock ', "Một thông báo điển hình nếu trình nền không chạy và nó đang tìm kiếm tệp ổ cắm ở vị trí Datadir cũ.

Tôi đã thay đổi tệp My.cnf và MySQLD để trỏ đến vị trí mới, new_dir. Daemon chạy, nhưng tôi không thể mở mysql.

Cảm ơn trước.

# cat /etc/my.cnf
[mysqld]
datadir=/NEW_DIR/mysql
socket=/NEW_DIR/mysql/mysql.sock

# cat /etc/init.d/mysqld | grep datadir
get_mysql_option mysqld datadir "/NEW_DIR/mysql"
datadir="$result"
get_mysql_option mysqld socket "$datadir/mysql.sock"

# /etc/init.d/mysqld start
Starting MySQL:                                            [  OK  ]

# tail mysqld.log 
120203 11:12:20  mysqld started
120203 11:12:20  InnoDB: Started; log sequence number 0 43655
120203 11:12:20 [Note] /usr/libexec/mysqld: ready for connections.
Version: '5.0.77'  socket: '/NEW_DIR/mysql/mysql.sock'  port: 3306  Source distribution

# mysql
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

hỏi ngày 3 tháng 2 năm 2012 lúc 19:30Feb 3, 2012 at 19:30

Vấn đề là cấu hình chương trình máy khách

$> mysqladmin --socket=/path/to/socket version
4. Bạn có thể chỉ định tùy chọn dòng lệnh
$> mysqladmin --socket=/path/to/socket version
5 hoặc thêm nó trong phần
$> mysqladmin --socket=/path/to/socket version
6 trong tệp
$> mysqladmin --socket=/path/to/socket version
7 của bạn.

Vui lòng xem tài liệu để chỉ định tùy chọn thông qua các tệp tùy chọn: http://dev.mysql.com/doc/refman/5.0/en/option-files.html

Kể từ khi thay đổi đường dẫn ổ cắm ảnh hưởng đến tất cả các chương trình của máy khách, thì sẽ có ý nghĩa khi cập nhật toàn cầu

$> mysqladmin --socket=/path/to/socket version
7 và đặt tùy chọn
$> mysqladmin --socket=/path/to/socket version
9 trong phần
# cat /etc/my.cnf
[mysqld]
datadir=/NEW_DIR/mysql
socket=/NEW_DIR/mysql/mysql.sock

# cat /etc/init.d/mysqld | grep datadir
get_mysql_option mysqld datadir "/NEW_DIR/mysql"
datadir="$result"
get_mysql_option mysqld socket "$datadir/mysql.sock"

# /etc/init.d/mysqld start
Starting MySQL:                                            [  OK  ]

# tail mysqld.log 
120203 11:12:20  mysqld started
120203 11:12:20  InnoDB: Started; log sequence number 0 43655
120203 11:12:20 [Note] /usr/libexec/mysqld: ready for connections.
Version: '5.0.77'  socket: '/NEW_DIR/mysql/mysql.sock'  port: 3306  Source distribution

# mysql
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
0.

Đã trả lời ngày 3 tháng 2 năm 2012 lúc 19:38Feb 3, 2012 at 19:38

Xint0Xint0Xint0

1961 Huy hiệu bạc7 Huy hiệu đồng1 silver badge7 bronze badges

3

Để thiết lập cấu hình cho chương trình máy khách (trên máy chủ khách, trong trường hợp của bạn rất có thể là máy chủ ứng dụng), bạn phải tạo một tệp mới trong thư mục người dùng của bạn có tên là

# cat /etc/my.cnf
[mysqld]
datadir=/NEW_DIR/mysql
socket=/NEW_DIR/mysql/mysql.sock

# cat /etc/init.d/mysqld | grep datadir
get_mysql_option mysqld datadir "/NEW_DIR/mysql"
datadir="$result"
get_mysql_option mysqld socket "$datadir/mysql.sock"

# /etc/init.d/mysqld start
Starting MySQL:                                            [  OK  ]

# tail mysqld.log 
120203 11:12:20  mysqld started
120203 11:12:20  InnoDB: Started; log sequence number 0 43655
120203 11:12:20 [Note] /usr/libexec/mysqld: ready for connections.
Version: '5.0.77'  socket: '/NEW_DIR/mysql/mysql.sock'  port: 3306  Source distribution

# mysql
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
1, như được mô tả trong 4.2.2.2 bằng các tệp tùy chọn.Sử dụng tệp này để thêm cài đặt mặc định cho ứng dụng
$> mysqladmin --socket=/path/to/socket version
4 bằng cách thêm phần
$> mysqladmin --socket=/path/to/socket version
6.Ví dụ, khi bạn chạy

$ mysql --print-defaults

Nó sẽ hiển thị các đầu ra (ví dụ) sau:

mysql would have been started with the following arguments:
--loose-default-auth=mysql_native_password
--socket=/var/run/mysqld/mysqld.sock
--character-sets-dir=/usr/share/mysql/charsets
--loose-default-character-set=utf8mb4 

(Các dòng mới được thêm vào để đọc)

Thêm các dòng sau vào tệp

# cat /etc/my.cnf
[mysqld]
datadir=/NEW_DIR/mysql
socket=/NEW_DIR/mysql/mysql.sock

# cat /etc/init.d/mysqld | grep datadir
get_mysql_option mysqld datadir "/NEW_DIR/mysql"
datadir="$result"
get_mysql_option mysqld socket "$datadir/mysql.sock"

# /etc/init.d/mysqld start
Starting MySQL:                                            [  OK  ]

# tail mysqld.log 
120203 11:12:20  mysqld started
120203 11:12:20  InnoDB: Started; log sequence number 0 43655
120203 11:12:20 [Note] /usr/libexec/mysqld: ready for connections.
Version: '5.0.77'  socket: '/NEW_DIR/mysql/mysql.sock'  port: 3306  Source distribution

# mysql
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
1 mới của bạn:

[mysql]
socket=/tmp/example

Từ bây giờ, các cài đặt mặc định sau sẽ được sử dụng:

$ mysql --print-defaults
mysql would have been started with the following arguments:
--loose-default-auth=mysql_native_password
--socket=/var/run/mysqld/mysqld.sock
--character-sets-dir=/usr/share/mysql/charsets
--loose-default-character-set=utf8mb4
--socket=/tmp/example

Đối với mục đích kiểm tra, khi bạn gọi

$> mysqladmin --socket=/path/to/socket version
4, bạn sẽ nhận được thông báo lỗi sau (như mong đợi):

$ mysql
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/example' (2)

Trong trường hợp của bạn, bạn có thể muốn thêm dòng

# cat /etc/my.cnf
[mysqld]
datadir=/NEW_DIR/mysql
socket=/NEW_DIR/mysql/mysql.sock

# cat /etc/init.d/mysqld | grep datadir
get_mysql_option mysqld datadir "/NEW_DIR/mysql"
datadir="$result"
get_mysql_option mysqld socket "$datadir/mysql.sock"

# /etc/init.d/mysqld start
Starting MySQL:                                            [  OK  ]

# tail mysqld.log 
120203 11:12:20  mysqld started
120203 11:12:20  InnoDB: Started; log sequence number 0 43655
120203 11:12:20 [Note] /usr/libexec/mysqld: ready for connections.
Version: '5.0.77'  socket: '/NEW_DIR/mysql/mysql.sock'  port: 3306  Source distribution

# mysql
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
6 vì vậy nó sẽ sử dụng tên máy chủ đã cho như bạn làm với
# cat /etc/my.cnf
[mysqld]
datadir=/NEW_DIR/mysql
socket=/NEW_DIR/mysql/mysql.sock

# cat /etc/init.d/mysqld | grep datadir
get_mysql_option mysqld datadir "/NEW_DIR/mysql"
datadir="$result"
get_mysql_option mysqld socket "$datadir/mysql.sock"

# /etc/init.d/mysqld start
Starting MySQL:                                            [  OK  ]

# tail mysqld.log 
120203 11:12:20  mysqld started
120203 11:12:20  InnoDB: Started; log sequence number 0 43655
120203 11:12:20 [Note] /usr/libexec/mysqld: ready for connections.
Version: '5.0.77'  socket: '/NEW_DIR/mysql/mysql.sock'  port: 3306  Source distribution

# mysql
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
7.Bạn cũng có thể thêm cài đặt
# cat /etc/my.cnf
[mysqld]
datadir=/NEW_DIR/mysql
socket=/NEW_DIR/mysql/mysql.sock

# cat /etc/init.d/mysqld | grep datadir
get_mysql_option mysqld datadir "/NEW_DIR/mysql"
datadir="$result"
get_mysql_option mysqld socket "$datadir/mysql.sock"

# /etc/init.d/mysqld start
Starting MySQL:                                            [  OK  ]

# tail mysqld.log 
120203 11:12:20  mysqld started
120203 11:12:20  InnoDB: Started; log sequence number 0 43655
120203 11:12:20 [Note] /usr/libexec/mysqld: ready for connections.
Version: '5.0.77'  socket: '/NEW_DIR/mysql/mysql.sock'  port: 3306  Source distribution

# mysql
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
8 trong tệp này.