django當中需要使用mysql作為數(shù)據(jù)庫,創(chuàng)建好Model之后執(zhí)行以下命令創(chuàng)建表
python manage.py migrate
但是執(zhí)行的時候遇到錯誤:
django.db.utils.OperationalError: (2002, "Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)")
原因分析:
我們在連接mysql的時候,如果host是localhost, 就會使用Unix Domain Socket來連接, MySql默認的sock文件路徑是/tmp/mysql.sock
, 可以通過打開/etc/my.cnf
確認工坊。
解決方案
1.修改HOST
打開settings.py文件,找到DATABASES
的HOST
字段。
有兩種修改方案:
- 把
localhost
改成127.0.0.1
洽蛀, 使用內(nèi)網(wǎng)連接 - 把
localhost
改成/var/lib/mysql/mysql.sock
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'xxx',
'USER': 'root',
'PASSWORD': 'passwd',
'HOST':'127.0.0.1', # 或者 `/tmp/mysql.sock`
'PORT':'3306',
}
}
2. 修改mysql的sock文件路徑
vi etc/my.cnf
將sock路徑變更為/var/lib/mysql/mysql.sock
socket = /tmp/mysql.sock
重啟MySql服務(wù)摹迷。
Centos機器上
systemctl restart mysqld
3. 數(shù)據(jù)庫連接指定sock路徑
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'xxx',
'USER': 'root',
'PASSWORD': 'passwd',
'OPTIONS': {
"unix_socket": "/tmp/mysql.sock",
},
}
}