如何在Symfony 4中连接使用MAMP创建的MySQL数据库?

4
我在MAMP中创建了一个名为“project”的数据库。
我在我的.env文件中添加了以下这行代码:
DATABASE_URL=mysql://root:root@localhost:3306/project

现在我想要运行。
php bin/console doctrine:database:create

但我收到了一个错误信息:

SQLSTATE[HY000] [2002] 没有这样的文件或目录

我的Doctrine配置:
parameters:
    # Adds a fallback DATABASE_URL if the env var is not set.
    # This allows you to run cache:warmup even if your
    # environment variables are not available yet.
    # You should not need to change this value.
    env(DATABASE_URL): ''

doctrine:
    dbal:
        # configure these for your database server
        driver: 'pdo_mysql'
        server_version: '5.7'
        charset: utf8mb4
        default_table_options:
            charset: utf8mb4
            collate: utf8mb4_unicode_ci

        url: '%env(resolve:DATABASE_URL)%'
    orm:
        auto_generate_proxy_classes: '%kernel.debug%'
        naming_strategy: doctrine.orm.naming_strategy.underscore
        auto_mapping: true
        mappings:
            App:
                is_bundle: false
                type: annotation
                dir: '%kernel.project_dir%/src/Entity'
                prefix: 'App\Entity'
                alias: App

请问您能展示一下Doctrine的配置吗? - Alessandro Minoccheri
@AlessandroMinoccheri 你在哪里找到它? - peace_love
你是指 config/packages/doctrine.yaml 文件吗? - peace_love
是的,准确地说,请添加它。 - Alessandro Minoccheri
@AlessandroMinoccheri 已添加。 - peace_love
4个回答

7

已解决!

在文件“config/packages/doctrine.yaml”中,我需要添加以下行:

unix_socket: /Applications/MAMP/tmp/mysql/mysql.sock

这意味着更改以下内容:

 dbal:
        # configure these for your database server
        driver: 'pdo_mysql'
        server_version: '5.7'
        charset: utf8mb4
        default_table_options:
            charset: utf8mb4
            collate: utf8mb4_unicode_ci

        url: '%env(resolve:DATABASE_URL)%'

介绍

 dbal:
        # configure these for your database server
        driver: 'pdo_mysql'
        server_version: '5.7'
        charset: utf8mb4
        unix_socket: /Applications/MAMP/tmp/mysql/mysql.sock
        default_table_options:
            charset: utf8mb4
            collate: utf8mb4_unicode_ci

        url: '%env(resolve:DATABASE_URL)%'

1
我可以给你一些关于错误的背景信息:如果你使用 localhost,它有特殊的含义,mysql-client库会尝试通过套接字连接。由于你的套接字不在默认位置之一,你必须提供dbal精确的位置。 你也可以将 localhost 更改为 127.0.0.1 以强制进行TCP连接,这将不使用套接字。 - Rufinus
@Rufinus 我尝试使用 127.0.0.1 代替 localhost,但是我仍然遇到了“连接失败”的错误。 - peace_love
你也可以在环境文件(例如.env.local)的DATABASE_URL中添加unix_socket参数:DATABASE_URL=mysql://root:root@localhost:3306/dbname?unix_socket=/Applications/MAMP/tmp/mysql/mysql.sock - thi3rry

6

我遇到了同样的问题。添加了unix_socket并将127.0.0.1更改为localhost,它在MAMP 5.5上起作用。

doctrine.yaml

doctrine:
dbal:
    # configure these for your database server
    driver: 'pdo_mysql'
    server_version: '5.7'
    charset: utf8mb4
    unix_socket: /Applications/MAMP/tmp/mysql/mysql.sock
    default_table_options:
        charset: utf8mb4
        collate: utf8mb4_unicode_ci

    url: '%env(resolve:DATABASE_URL)%'

.env

DATABASE_URL=mysql://root:root@localhost:3306/mydb

这对我起作用了。 - devXen

1
尝试更改这个:

url: '%env(resolve:DATABASE_URL)%'

转换为:

url: '%env(DATABASE_URL)%'

1
你可以尝试明确设置MySQL服务器。
doctrine:
    dbal:
        default_connection: default
        connections:
            default:
                dbname:         local_api
                user:           root
                password:       null
                host:           localhost
                driver:         pdo_mysql
                server_version: '5.5' # in case you are using mysql 5.5

我今天也遇到了同样的问题。这个问题的日期已经过去了5年。太糟糕了!为什么维护人员不能让这个设置更容易一些呢? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接