Managing DBs in DDEV
January 23, 2025 · AI Conversations
### 1. **Configure Separate Databases for Each Project**
Each DDEV project can have its own database. When you create a new project in DDEV, it automatically sets up a MySQL or MariaDB container (depending on your setup). For each project, DDEV will configure its database with a separate schema.
– In your `ddev/config.yaml`, you'll find the database configuration, which typically looks like this:
# Example config.yaml for a Laravel project
name: my-project
type: php
php_version: "8.3"
webserver_type: apache-fpm
router_http_port: "8080"
router_https_port: "8443"
database:
user: dbuser
password: dbpassword
name: myproject_db
host: db
Make sure each project has its own unique database name.
### 2. **Exporting/Importing Databases**
To move data between multiple projects, you can use DDEV's `ddev export-db` and `ddev import-db` commands.
– **Exporting a Database:**
You can export the database from one project using:
ddev export-db --file=my_project_db.sql
This will export the database of your current project to a `.sql` file.
– **Importing a Database:**
You can import the exported database into another project by running:
ddev import-db --file=my_project_db.sql
Ensure that you’re in the correct DDEV project directory when importing.
### 3. **Sharing Databases Between Projects**
If you want to share a database between multiple DDEV projects (for example, common data between them), you can point to an external database. DDEV allows you to configure a database connection to an external service in the `config.yaml`.
You’ll need to adjust the `database` section to use the external database host and credentials.
database:
user: external_dbuser
password: external_dbpassword
name: shared_db
host: external_host
### 4. **Multi-Database Setup in Laravel**
If you're using Laravel and need to manage multiple databases, you can configure them in the `config/database.php` file. Here’s an example for two databases:
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'database1'),
'username' => env('DB_USERNAME', 'root'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
],
'other_connection' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'database2'),
'username' => env('DB_USERNAME', 'root'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
],
This way, Laravel can interact with multiple databases seamlessly.
—
By combining these strategies, you can effectively manage multiple databases across different DDEV projects. Would you like to dive deeper into any specific part of this process?
at vendor/laravel/framework/src/Illuminate/Database/Connection.php:825
821▕ $this->getName(), $query, $this->prepareBindings($bindings), $e
822▕ );
823▕ }
824▕
➜ 825▕ throw new QueryException(
826▕ $this->getName(), $query, $this->prepareBindings($bindings), $e
827▕ );
828▕ }
829▕ }
+41 vendor frames
42 artisan:13
IlluminateFoundationApplication::handleCommand()
This issue typically arises when:
1. **The database service name is incorrect.**
2. **The database container is not running or isn't accessible.**
### Steps to troubleshoot:
1. **Check the Database Host in `.env`:**
Ensure that the database host in your `.env` file is set to the correct service name used by DDEV. For example:
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=shareyourthoughts
DB_USERNAME=root
DB_PASSWORD=root
The `DB_HOST=db` refers to the service name `db` that is typically set up in DDEV's `docker-compose` configuration.
2. **Verify DDEV Configuration:**
Run `ddev describe` in your project folder. It will give you information about the database service and its container status. The database service name should match what is in the `.env` file (`db` in this case).
3. **Check the Database Container:**
Ensure the MariaDB (or MySQL) container is running. Use the following command to check the status:
ddev list
If the container isn’t running, start it using:
ddev start
4. **Network Issues:**
The `getaddrinfo` error can also occur if there's a network issue between the Laravel app and the MariaDB container. Try restarting DDEV:
ddev restart
5. **Database Container Name Change:**
If you've modified the database service name in DDEV (e.g., from `db` to something else), make sure the `.env` file reflects that change.
6. **Verify Docker Network:**
If you're running multiple DDEV projects, ensure they are all on the same Docker network and can communicate with each other. You can check the network configuration of your DDEV project using:
docker network inspect ddev_default
This will list the containers in the default network. Your app container should be able to connect to the `db` container.
### Quick Fix:
If everything is correct and the issue persists, try setting the database host in the `.env` file to the container's IP address instead of the service name (though this is usually not recommended because it might change):
DB_HOST=127.0.0.1
This can help identify if the issue is due to DNS resolution inside the container.
Let me know how it goes or if you need further assistance!
at vendor/laravel/framework/src/Illuminate/Database/Connection.php:825
821▕ $this->getName(), $query, $this->prepareBindings($bindings), $e
822▕ );
823▕ }
824▕
➜ 825▕ throw new QueryException(
826▕ $this->getName(), $query, $this->prepareBindings($bindings), $e
827▕ );
828▕ }
829▕ }
+41 vendor frames
42 artisan:13
IlluminateFoundationApplication::handleCommand()
### Here’s how you can resolve it:
#### 1. **Check the `.env` Database Configuration**
Make sure your `.env` file has the correct configuration for the database host, which should be the service name for the MariaDB container.
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=shareyourthoughts
DB_USERNAME=root
DB_PASSWORD=root
In DDEV, the database container service is usually called `db`. If you've changed the name of the database service, update this to reflect the correct service name.
#### 2. **Verify DDEV Configuration**
Use the `ddev describe` command to check if the `db` service is correctly named and running.
ddev describe
Look for the `db` service and make sure it matches the `DB_HOST=db` setting in the `.env` file.
#### 3. **Check DDEV Containers**
If the database container is not running, start it using:
ddev start
Then, check the status again with:
ddev list
If you don’t see your project listed or the database container is not running, try restarting the entire project:
ddev restart
#### 4. **Confirm Database Container is Reachable**
You can inspect the containers to ensure the `db` service is properly linked to your web service. Run:
docker ps
Look for the container that is running the `db` service (e.g., `db_1`) and check if it’s up and running. If necessary, restart it:
ddev restart
#### 5. **Test Database Connection with Docker CLI**
If you're unsure whether the `db` container is reachable, you can try to connect to it manually from within the web container:
ddev ssh
mysql -h db -u root -p
This will allow you to confirm if the `db` hostname is resolvable inside the DDEV environment.
#### 6. **Check for DNS Resolution Issues**
Sometimes, DNS resolution within Docker containers can have issues. Try setting the database host to `127.0.0.1` (or `localhost`) in the `.env` file:
DB_HOST=127.0.0.1
This will use the local machine’s IP for the database connection. This is more of a workaround, but it can help troubleshoot if DNS issues are causing the problem.
#### 7. **Inspect the Docker Network**
If you're working with multiple DDEV projects, ensure they are on the same Docker network,
Here's a more focused troubleshooting guide to resolve the issue:
### 1. **Verify DDEV's Database Service Name:**
DDEV assigns a service name for the database container (typically `db`). Ensure that the correct database host is specified in the `.env` file for your project.
Open the `.env` file and confirm that the `DB_HOST` is set to `db` (or the name of the database service container, if it’s different).
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=shareyourthoughts
DB_USERNAME=root
DB_PASSWORD=root
If the name of the database service has changed in DDEV (check `docker-compose` or `ddev describe`), update the `DB_HOST` to match the new service name.
### 2. **Check if the DDEV Containers Are Running:**
Ensure that the DDEV containers, including the database container, are running properly. You can check the status of your DDEV project by running:
ddev describe
This will show the status of the database container. If the database container is down, start your DDEV environment:
ddev start
### 3. **Test Database Connection Inside the Container:**
You can test the database connection directly inside the web container to verify that it can reach the database service. Run:
ddev ssh
Once inside the container, try pinging the `db` service:
ping db
If it doesn't resolve, there might be an issue with the Docker network or service name.
### 4. **Check the Database Container Logs:**
To see if there are any errors in the database container, check its logs:
ddev logs db
This may reveal issues with the MariaDB or MySQL service inside the container.
### 5. **Check Docker Network Configuration:**
If you're running multiple DDEV projects, make sure they are connected to the same Docker network. You can inspect the Docker network by running:
docker network inspect ddev_default
This will list all containers in the `ddev_default` network. Ensure that your web container can communicate with the `db` container.
### 6. **Rebuild DDEV Project:**
If the problem persists, try rebuilding the project to ensure everything is set up correctly:
ddev restart
If needed, you can also rebuild the containers:
ddev stop
ddev start
### 7. **Check for Database Host Configuration in `config/database.php`:**
In Laravel's `config/database.php`, ensure the database configuration matches the settings in your `.env` file:
'connections' => [
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'db'), // Ensure this matches the DB_HOST in .env
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'shareyourthoughts'),
'username' => env('DB_USERNAME', 'root'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
],
],
### 8. **Restart DDEV and Clear Cache:**
Sometimes, Laravel caches the configuration, so clearing the cache after ensuring everything is correct might help:
ddev ssh
php artisan config:clear
php artisan cache:clear
—
If none of the above steps work, feel free to provide more details, and I can assist further.
name: shareyourthoughts
type: laravel
docroot: public
php_version: "8.3"
webserver_type: nginx-fpm
xdebug_enabled: false
additional_hostnames: []
additional_fqdns: []
database:
type: mariadb
version: "10.11"
use_dns_when_possible: true
composer_version: "2"
web_environment: []
corepack_enable: false
# Key features of DDEV's config.yaml:
# name: # Name of the project, automatically provides
# http://projectname.ddev.site and https://projectname.ddev.site
# type: # backdrop, cakephp, craftcms, drupal, drupal6, drupal7, drupal8, drupal9, drupal10, drupal11, laravel, magento, magento2, php, shopware6, silverstripe, symfony, typo3, wordpress
# See https://ddev.readthedocs.io/en/stable/users/quickstart/ for more
# information on the different project types
# docroot: # Relative path to the directory containing index.php.
# php_version: "8.3" # PHP version to use, "5.6" through "8.4"
# You can explicitly specify the webimage but this
# is not recommended, as the images are often closely tied to DDEV's' behavior,
# so this can break upgrades.
# webimage: # nginx/php docker image.
# database:
# type: # mysql, mariadb, postgres
# version: # database version, like "10.11" or "8.0"
# MariaDB versions can be 5.5-10.8, 10.11, and 11.4.
# MySQL versions can be 5.5-8.0.
# PostgreSQL versions can be 9-17.
# router_http_port: # Port to be used for http (defaults to global configuration, usually 80)
# router_https_port: # Port for https (defaults to global configuration, usually 443)
# xdebug_enabled: false # Set to true to enable Xdebug and "ddev start" or "ddev restart"
# Note that for most people the commands
# "ddev xdebug" to enable Xdebug and "ddev xdebug off" to disable it work better,
# as leaving Xdebug enabled all the time is a big performance hit.
# xhprof_enabled: false # Set to true to enable Xhprof and "ddev start" or "ddev restart"
# Note that for most people the commands
# "ddev xhprof" to enable Xhprof and "ddev xhprof off" to disable it work better,
# as leaving Xhprof enabled all the time is a big performance hit.
# webserver_type: nginx-fpm or apache-fpm
# timezone: Europe/Berlin
# If timezone is unset, DDEV will attempt to derive it from the host system timezone
# using the $TZ environment variable or the /etc/localtime symlink.
# This is the timezone used in the containers and by PHP;
# it can be set to any valid timezone,
# see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
# For example Europe/Dublin or MST7MDT
# composer_root:
# Relative path to the Composer root directory from the project root. This is
# the directory which contains the composer.json and where all Composer related
# commands are executed.
# composer_version: "2"
# You can set it to "" or "2" (default) for Composer v2 or "1" for Composer v1
# to use the latest major version available at the time your container is built.
# It is also possible to use each other Composer version channel. This includes:
# – 2.2 (latest Composer LTS version)
# – stable
# – preview
# – snapshot
# Alternatively, an explicit Composer version may be specified, for example "2.2.18".
# To reinstall Composer after the image was built, run "ddev debug rebuild".
# nodejs_version: "22"
# change from the default system Node.js version to any other version.
# See https://ddev.readthedocs.io/en/stable/users/configuration/config/#nodejs_version for more information
# and https://www.npmjs.com/package/n#specifying-nodejs-versions for the full documentation,
# Note that using of 'ddev nvm' is discouraged because "nodejs_version" is much easier to use,
# can specify any version, and is more robust than using 'nvm'.
# corepack_enable: false
# Change to 'true' to 'corepack enable' and gain access to latest versions of yarn/pnpm
# additional_hostnames:
# – somename
# – someothername
# would provide http and https URLs for "somename.ddev.site"
# and "someothername.ddev.site".
# additional_fqdns:
# – example.com
# – sub1.example.com
# would provide http and https URLs for "example.com" and "sub1.example.com"
# Please take care with this because it can cause great confusion.
# upload_dirs: "custom/upload/dir"
#
# upload_dirs:
# – custom/upload/dir
# – ../private
#
# would set the destination paths for ddev import-files to /custom/upload/dir
# When Mutagen is enabled this path is bind-mounted so that all the files
# in the upload_dirs don't have to be synced into Mutagen.
# disable_upload_dirs_warning: false
# If true, turns off the normal warning that says
# "You have Mutagen enabled and your 'php' project type doesn't have upload_dirs set"
# ddev_version_constraint: ""
# Example:
# ddev_version_constraint: ">= 1.22.4"
# This will enforce that the running ddev version is within this constraint.
# See https://github.com/Masterminds/semver#checking-version-constraints for
# supported constraint formats
# working_dir:
# web: /var/www/html
# db: /home
# would set the default working directory for the web and db services.
# These values specify the destination directory for ddev ssh and the
# directory in which commands passed into ddev exec are run.
# omit_containers: [db, ddev-ssh-agent]
# Currently only these containers are supported. Some containers can also be
# omitted globally in the ~/.ddev/global_config.yaml. Note that if you omit
# the "db" container, several standard features of DDEV that access the
# database container will be unusable. In the global configuration it is also
# possible to omit ddev-router, but not here.
# performance_mode: "global"
# DDEV offers performance optimization strategies to improve the filesystem
# performance depending on your host system. Should be configured globally.
#
# If set, will override the global config. Possible values are:
# – "global": uses the value from the global config.
# – "none": disables performance optimization for this project.
# – "mutagen": enables Mutagen for this project.
# – "nfs": enables NFS for this project.
#
# See https://ddev.readthedocs.io/en/stable/users/install/performance/#nfs
# See https://ddev.readthedocs.io/en/stable/users/install/performance/#mutagen
# fail_on_hook_fail: False
# Decide whether 'ddev start' should be interrupted by a failing hook
# host_https_port: "59002"
# The host port binding for https can be explicitly specified. It is
# dynamic unless otherwise specified.
# This is not used by most people, most people use the *router* instead
# of the localhost port.
# host_webserver_port: "59001"
# The host port binding for the ddev-webserver can be explicitly specified. It is
# dynamic unless otherwise specified.
# This is not used by most people, most people use the *router* instead
# of the localhost port.
# host_db_port: "59002"
# The host port binding for the ddev-dbserver can be explicitly specified. It is dynamic
# unless explicitly specified.
# mailpit_http_port: "8025"
# mailpit_https_port: "8026"
# The Mailpit ports can be changed from the default 8025 and 8026
# host_mailpit_port: "8025"
# The mailpit port is not normally bound on the host at all, instead being routed
# through ddev-router, but it can be bound directly to localhost if specified here.
# webimage_extra_packages: [php7.4-tidy, php-bcmath]
# Extra Debian packages that are needed in the webimage can be added here
# dbimage_extra_packages: [telnet,netcat]
# Extra Debian packages that are needed in the dbimage can be added here
# use_dns_when_possible: true
# If the host has internet access and the domain configured can
# successfully be looked up, DNS will be used for hostname resolution
# instead of editing /etc/hosts
# Defaults to true
# project_tld: ddev.site
# The top-level domain used for project URLs
# The default "ddev.site" allows DNS lookup via a wildcard
# If you prefer you can change this to "ddev.local" to preserve
# pre-v1.9 behavior.
# ngrok_args: –basic-auth username:pass1234
# Provide extra flags to the "ngrok http" command, see
# https://ngrok.com/docs/ngrok-agent/config or run "ngrok http -h"
# disable_settings_management: false
# If true, DDEV will not create CMS-specific settings files like
# Drupal's settings.php/settings.ddev.php or TYPO3's additional.php
# In this case the user must provide all such settings.
# You can inject environment variables into the web container with:
# web_environment:
# – SOMEENV=somevalue
# – SOMEOTHERENV=someothervalue
# no_project_mount: false
# (Experimental) If true, DDEV will not mount the project into the web container;
# the user is responsible for mounting it manually or via a script.
# This is to enable experimentation with alternate file mounting strategies.
# For advanced users only!
# bind_all_interfaces: false
# If true, host ports will be bound on all network interfaces,
# not the localhost interface only. This means that ports
# will be available on the local network if the host firewall
# allows it.
# default_container_timeout: 120
# The default time that DDEV waits for all containers to become ready can be increased from
# the default 120. This helps in importing huge databases, for example.
#web_extra_exposed_ports:
#- name: nodejs
# container_port: 3000
# http_port: 2999
# https_port: 3000
#- name: something
# container_port: 4000
# https_port: 4000
# http_port: 3999
# Allows a set of extra ports to be exposed via ddev-router
# Fill in all three fields even if you don’t intend to use the https_port!
# If you don’t add https_port, then it defaults to 0 and ddev-router will fail to start.
#
# The port behavior on the ddev-webserver must be arranged separately, for example
# using web_extra_daemons.
# For example, with a web app on port 3000 inside the container, this config would
# expose that web app on https://.ddev.site:9999 and http://.ddev.site:9998
# web_extra_exposed_ports:
# – name: myapp
# container_port: 3000
# http_port: 9998
# https_port: 9999
#web_extra_daemons:
#- name: "http-1"
# command: "/var/www/html/node_modules/.bin/http-server -p 3000"
# directory: /var/www/html
#- name: "http-2"
# command: "/var/www/html/node_modules/.bin/http-server /var/www/html/sub -p 3000"
# directory: /var/www/html
# override_config: false
# By default, config.*.yaml files are *merged* into the configuration
# But this means that some things can't be overridden
# For example, if you have 'use_dns_when_possible: true'' you can't override it with a merge
# and you can't erase existing hooks or all environment variables.
# However, with "override_config: true" in a particular config.*.yaml file,
# 'use_dns_when_possible: false' can override the existing values, and
# hooks:
# post-start: []
# or
# web_environment: []
# or
# additional_hostnames: []
# can have their intended affect. 'override_config' affects only behavior of the
# config.*.yaml file it exists in.
# Many DDEV commands can be extended to run tasks before or after the
# DDEV command is executed, for example "post-start", "post-import-db",
# "pre-composer", "post-composer"
# See https://ddev.readthedocs.io/en/stable/users/extend/custom-commands/ for more
# information on the commands that can be extended and the tasks you can define
# for them. Example:
#hooks:
name: shareyourthoughts
type: laravel
docroot: public
php_version: "8.3"
webserver_type: nginx-fpm
xdebug_enabled: false
additional_hostnames: []
additional_fqdns: []
database:
type: mariadb
version: "10.11"
use_dns_when_possible: true
composer_version: "2"
web_environment: []
corepack_enable: false
# Optional configuration for enabling specific features:
# webimage_extra_packages: [php7.4-tidy, php-bcmath]
# Extra packages can be added if needed for your web image.
# dbimage_extra_packages: [telnet, netcat]
# Extra packages for the database image, like telnet or netcat.
# Performance optimization options:
# performance_mode: "mutagen" # Adjust depending on your system for best performance.
# Set project-level domain TLD for local development:
# project_tld: ddev.site
# Enable extra ports if you need them exposed for specific services:
# web_extra_exposed_ports:
# - name: nodejs
# container_port: 3000
# http_port: 2999
# https_port: 3000
# Example of extending DDEV commands via hooks:
# hooks:
# post-start: ["echo 'Project started!'"]
# post-import-db: ["echo 'Database import completed!'"]
### Notes:
– **Web Server**: You're using `nginx-fpm`, which is appropriate for Laravel.
– **Database**: MariaDB 10.11 is specified.
– **Composer**: Version 2 is already set, which is good for modern Laravel setups.
– **Optional settings**: You can modify this further with features like exposed ports, performance optimizations, and custom hooks if needed.
– **Web Environment**: You may want to add environment variables to configure your Laravel application, such as `APP_KEY`, `DB_CONNECTION`, etc.
Let me know if you need any specific adjustments!
name: shareyourthoughts
type: laravel
docroot: public
php_version: "8.3"
webserver_type: nginx-fpm
xdebug_enabled: false
additional_hostnames: []
additional_fqdns: []
database:
type: mariadb
version: "10.11"
host: db
port: 3306
username: dbuser
password: dbpassword
dbname: dbname
use_dns_when_possible: true
composer_version: "2"
web_environment: []
corepack_enable: false
In this configuration:
– `type: mariadb` specifies the database type.
– `version: "10.11"` specifies the version of MariaDB.
– `host: db` points to the database container in the DDEV environment (it may also be named differently depending on your setup).
– `port: 3306` is the default MariaDB port.
– `username: dbuser`, `password: dbpassword`, and `dbname: dbname` are placeholders for your actual database credentials. Make sure to replace them with the correct values as needed.
Let me know if you'd like to modify any of these details or add something else!
at vendor/laravel/framework/src/Illuminate/Database/Connection.php:825
821▕ $this->getName(), $query, $this->prepareBindings($bindings), $e
822▕ );
823▕ }
824▕
➜ 825▕ throw new QueryException(
826▕ $this->getName(), $query, $this->prepareBindings($bindings), $e
827▕ );
828▕ }
829▕ }
+41 vendor frames
42 artisan:13
IlluminateFoundationApplication::handleCommand()
Here are a few things to check and try:
1. **Check the Database Host Name**:
Ensure that the host name `db` matches the name of the database service in your Docker setup. For example, if you're using Docker Compose, check the service name for the database in your `docker-compose.yml`. It should look something like this:
services:
db:
image: mariadb:10.11
container_name: db
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: dbname
MYSQL_USER: dbuser
MYSQL_PASSWORD: dbpassword
Ensure that `db` matches the host name in your `.env` file for the database connection.
2. **Check the `.env` File**:
Ensure that the `DB_HOST` in your `.env` file points to the correct host name. It should look something like:
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=dbname
DB_USERNAME=dbuser
DB_PASSWORD=dbpassword
3. **Database Service Dependency**:
Ensure that the Laravel app waits for the database container to be fully ready before starting. You can do this by adding a `depends_on` directive in your `docker-compose.yml`:
services:
app:
image: your-laravel-image
depends_on:
- db
4. **Network Configuration**:
Ensure both containers (`app` and `db`) are on the same network. Docker Compose usually handles this automatically, but check that the containers are part of the same network if you're not using Docker Compose.
5. **Clear Config Cache**:
Sometimes, cached configurations can cause issues. Run the following commands to clear the cache and configuration:
php artisan config:clear
php artisan cache:clear
6. **Test the Connection**:
You can test the connection to the database from the Laravel container by running a simple MySQL client command inside the container (if the client is installed):
docker exec -it your-app-container-name bash
mysql -h db -u dbuser -p
Enter the password and see if you can connect to the database.
Let me know if you need further clarification or help!
1. **Check DDEV Database Service:**
– Ensure that the database service (e.g., MariaDB) is running correctly. You can check by running:
ddev list
This will show the status of your DDEV environment and whether the database container is up.
2. **Verify Database Hostname:**
– DDEV typically uses the service name `db` for the database, so in your `.env` file, ensure that the `DB_HOST` is set to `db`, like so:
DB_HOST=db
3. **Check Database Credentials:**
– Ensure that the database name, username, and password in your `.env` file are correct:
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=your_database
DB_USERNAME=root
DB_PASSWORD=root
4. **Check DDEV Logs:**
– Run `ddev logs` to see if there are any issues with the database container that might be affecting the connection.
5. **Rebuild DDEV Containers:**
– If everything appears in order and it's still failing, try rebuilding your DDEV containers:
ddev restart
6. **Accessing the Database:**
– If the error persists, try accessing the database directly using DDEV’s database CLI:
ddev ssh
mysql -u root -p
If you need more help troubleshooting, let me know!