Skip to content

Rate this page
Thanks for your feedback
Thank you! The feedback has been submitted.

For help, click the link below to get free database assistance or contact our experts for personalized support.

Post-installation

Depending on the type of installation, you may need to do the following tasks:

Installed using binary files or compiling from source

Task
Initialize the data dictionary
Test the server
Set service to start at boot time

Initialize the data directory

If you install the server using either the source distribution or generic binary distribution files, the data directory is not initialized, and you must run the initialization process after installation.

Run mysqld with the –initialize option or the initialize- option.

Executing mysqld with either option does the following:

  • Verifies the existence of the data directory

  • Initializes the system tablespace and related structures

  • Creates system tables including grant tables, time zone tables, and server-side help tables

  • Creates root@localhost

You should run the following steps with the mysql login.

  1. Navigate to the MySQL directory. The example uses the default location.

    cd /usr/local/mysql
    
  2. Create a directory for the MySQL files. The secure_file_priv uses the directory path as a value.

    mkdir mydata
    

    The mysql user account should have the drwxr-x--- permissions. Four sections define the permissions; file or directory, User, Group, and Others.

    The first character designates if the permissions are for a file or directory. The first character is d for a directory.

    The rest of the sections are specified in three-character sets.

    Permission User Group Other
    Read Yes Yes No
    Write Yes No No
    Execute Yes Yes No
  3. Run the command to initialize the data directory.

    bin/mysqld --initialize
    

Test the server

After you have initialized the data directory, and the server is started, you can run tests on the server.

This section assumes you have used the default installation settings. If you have modified the installation, navigate to the installation location. You can also add the location by Setting the Environment Variables .

You can use the mysqladmin client to access the server.

If you have issues connecting to the server, use the root user and the root account password.

sudo mysqladmin -u root -p version
Expected output
Enter password:
mysql Ver 9.7.0-0 for debian-linux-gnu on x86_64 (Percona Server (GPL), Release '10', Revision 'f446c04')
...
Server version      9.7.0-0
Protocol version    10
Connection          Localhost via UNIX socket
UNIX socket         /var/run/mysqld/mysqld.sock
Uptime:             4 hours 58 min 10 section

Threads:    2 Questions:    16 Slow queries: 0 Opens: 139 Flush tables: 3
Open tables: 59  Queries per second avg: 0.0000

Use mysqlshow to display database and table information.

sudo mysqlshow -u root -p
Expected output
Enter password:

+---------------------+
|      Databases      |
+=====================+
| information_schema  |
+---------------------+
| mysql               |
+---------------------+
| performance_schema  |
+---------------------+
| sys                 |
+---------------------+

Set service to run at boot time

After a generic binary installation, manually configure systemd support.

The following commands start, check the status, and stop the server:

sudo systemctl start mysqld
sudo systemctl status mysqld
sudo systemctl stop mysqld

Run the following command to start the service at boot time:

sudo systemctl enable mysqld
Run the following command to prevent a service from starting at boot time:

sudo systemctl disable mysqld

All installations

Task
Update the root password
Secure the server
Populate the time zone tables

Update the root password

During installation on Debian/Ubuntu, you are prompted to set a root password. On Red Hat Enterprise Linux and derivatives, you must set or update the root password after installation.

  1. Restart the server with the --skip-grant-tables option enabled to allow access without a password. This option is insecure and disables remote connections.

    sudo systemctl stop mysqld
    sudo systemctl set-environment MYSQLD_OPTS="--skip-grant-tables"
    sudo systemctl start mysqld 
    mysql
    
  2. Update the root password using the caching_sha2_password authentication plugin:

    Important

    The mysql_native_password plugin has been removed in MySQL 9.x. You must use the caching_sha2_password authentication plugin.

    Note

    In MySQL 9.7 and later, ALTER USER automatically updates grant tables. Running FLUSH PRIVILEGES is not required unless you modify system tables directly.

    ALTER USER 'root'@'localhost'
    IDENTIFIED WITH caching_sha2_password
    BY 'rootPassword_12';
    

    If the command returns Query OK, run EXIT;

    EXIT;
    

    If the command fails with the ERROR 1524 (HY000): Plugin 'mysql_native_password' is not loaded error, the account is configured to use a removed mysql_native_password plugin (for example, after an upgrade from an older version).

    Check the current authentication plugin:

    SELECT User, Host, plugin FROM mysql.user WHERE User = 'root';
    

    If the plugin is mysql_native_password, rerun the ALTER USER command to switch to the caching_sha2_password authentication plugin.

    ALTER USER 'root'@'localhost'
    IDENTIFIED WITH caching_sha2_password
    BY 'rootPassword_12';
    

    If MySQL returns the ERROR 1819 (HY000): Your password does not satisfy the current policy error, check the password policy requirements with:

    SHOW VARIABLES LIKE 'validate_password%';
    

    Then choose a password that satisfies the policy.

  3. Stop the server, remove the --skip-grant-tables option, and restart the server:

    sudo systemctl stop mysqld
    sudo systemctl unset-environment MYSQLD_OPTS
    sudo systemctl start mysqld
    mysql -u root -p
    

Secure the server

The mysql_secure_installation script improves the security of the instance.

The script does the following:

  • Changes the root password

  • Disallows remote login for root accounts

  • Removes anonymous users

  • Removes the test database

  • Reloads the privilege tables

The following statement runs the script:

mysql_secure_installation

Populate the time zone tables

The time zone system tables are the following:

  • time_zone

  • time_zone_leap_second

  • time_zone_name

  • time_zone_transition

  • time_zone_transition_type

If you install the server using either the source distribution or the generic binary distribution files, the installation creates the time zone tables, but the tables are not populated.

The mysql_tzinfo_to_sql program populates the tables from the zoneinfo directory data available in Linux.

A common method to populate the tables is to add the zoneinfo directory path to mysql_tzinfo_to_sql and then send the output into the mysql system schema .

The example assumes you are running the command with the root account. The account must have the privileges for modifying the mysql system schema.

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p -D mysql