6

更新:実行中で混乱を引き起こしていた古いmysqlプロセスを停止しました。今は新しい(5.1.40)バージョンしか実行していないと思います。しかし、それは間違ったデータファイルを指しています。デフォルトのインストールデータファイルを指しているので、の既存のデータファイルを指します/var/mysql。これが/etc/my.cnfの一部です

# The following options will be passed to all MySQL clients
[client]
#password   = your_password
port        = 3306
socket      = /var/mysql/mysql.sock

# Here follows entries for some specific programs

# The MySQL server
[mysqld]
port        = 3306
socket      = /var/mysql/mysql.sock

これは古いmysql.sockを指しています。新しいMySQLインストールのディレクトリツリーで見つからないようです?!?それがどこかあいまいでない限り。

誰か助けますか?基本的に、新しいMySQLをインストールしましたが、既存のデータで起動するには、この新しいバージョンを入手する必要があります。そして、このmysql.sockのことを整理します。


最近、Mac OS X ServerでMySQLを更新しましたが、RailsアプリからMySQLに接続するのに時間がかかります。または、そのことについてはコマンドラインから一貫して。

これは私の側の明らかなエラーだと確信していますが、コマンドラインの経験は中程度なので、誰かが助けてくれることを願っています...

また、Railsアプリが接続できなくなったことも関係しています。経由で接続でき/tmp/mysql.sockませんが、/ tmpにmysql.sockがなく、どこにあるべきかわからないため、なぜそこを探しているのかわかりません。

編集: mysql_config--socketsからの結果を追加します

$ mysql_config --sockets
Usage: /usr/local/mysql/bin/mysql_config [OPTIONS]
Options:
        --cflags         [-I/usr/local/mysql/include  -g -Os -arch ppc -fno-common   -D_P1003_1B_VISIBLE -DSIGNAL_WITH_VIO_CLOSE -DSIGNALS_DONT_BREAK_READ -DIGNORE_SIGHUP_SIGQUIT  -DDONT_DECLARE_CXA_PURE_VIRTUAL]
        --include        [-I/usr/local/mysql/include]
        --libs           [-arch ppc  -L/usr/local/mysql/lib -lmysqlclient -lz -lm     -lmygcc]
        --libs_r         [-arch ppc  -L/usr/local/mysql/lib -lmysqlclient_r -lz -lm     -lmygcc]
        --plugindir      [/usr/local/mysql/lib/plugin]
        --socket         [/tmp/mysql.sock]
        --port           [0]
        --version        [5.1.40]
        --libmysqld-libs [-arch ppc  -L/usr/local/mysql/lib -lmysqld -ldl  -lz -lm       -lmygcc]

Edit2 which mysql_config

$ which mysql_config
/usr/local/mysql/bin/mysql_config
4

3 に答える 3

2

サーバーとクライアントに異なるソケットを使用しようとしています。Rails は /tmp/mysql.sock に接続しようとしています。MySQL は /var/mysql/mysql.sock をリッスンしています。

通常、MySQL 構成は /etc/my.cnf に保存されますがps、出力では、ソケット パスがパラメーターとして指定されていることがわかります。したがって、実際にはシステムの仕様に依存します。

とにかく、/etc/my.cnf と database.yml を見て、mysql.sock が両方のファイルの同じパスにあることを確認してください。

于 2010-11-22T22:52:25.903 に答える
1

これで問題が完全に解決するかどうかはわかりませんが (cababunga が提案するようにソケット パスを修正する必要があるかもしれません)、127.0.0.1ソケット接続をバイパスして TCP 接続を確立してみてください。

于 2010-11-22T22:53:06.813 に答える
1

Ruby MySQL モジュールの関数real_connectは、実際には一連のパラメーターを受け取ります。

real_connect(host,user,password,db,port,socket,flags)

変更する必要があるのは、「socket」パラメーターです。Mac OS X 上の Python アプリでは、そのソケット パラメータを に設定する必要があります/var/mysql/mysql.sock

変更する必要があるのはホストではなく、実際のソケットであることに注意してください。socket:設定で使用できるパラメーターはありますか?

だからここであなたができることは...

OS X のターミナルのコマンド ラインでコマンドを実行するmysql_config --socketと、使用する必要がある「ソケット」の値が返されます (おそらく/var/mysql/mysql.sock)。

次に、database.yml ファイルに次の行を追加してください。

socket: /var/mysql/mysql.sock

私は主に OS X 上の Python を介してこれに遭遇し、同様の方法で修正しましたが、Ruby でも同じ問題が発生すると推測します。

于 2010-11-22T23:06:28.763 に答える