Configuration#
The MySQL Server we have running is configured via a configuration file. In fact, several or more configuration files.
To make navigating and viewing the files easier, let's change our current shell on the Ubuntu server to a root shell (#) in a more permanent basis: sudo -i
1 2 | |
Now we're doing everything as root, so *be careful`!
Navigate to the location of the MySQL configuration: cd /etc/mysql/
Note
If you did the previous projects and exercises, you'll know that the /etc/ path is mostly used for configuration files for the software/services running on your system.
1 2 3 4 5 6 7 8 9 10 | |
Our focus is on the mysql.cnf file, the conf.d/ and mysql.conf.d/ directories. Let's look at the contents of the mysql.cnf file:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | |
It's the !includedir lines at the bottom that we're interested in. They tell us that the mysql.cnf file doesn't contain any configuration at all, and in fact it's very likely coming from all the files found in two directories: /etc/mysql/conf.d/ and /etc/mysql/mysql.conf.d/. The term includedir tells us the dir or the directory, as a whole, is being included.
Let's look in those directories: ls -l conf.d/
1 2 3 4 | |
And ls -l mysql.conf.d/
1 2 3 4 | |
Which file or files do we care about the most? We're concerned with the configuration of the MySQL Server process, so the file we want to investigate is the mysql.conf.d/mysqld.conf
Note
The d in mysqld.conf stands for daemon, another word meaning service. If you see a file like, serverd.conf, ntpd.conf or just some-word followed by d, and it's in /etc/, then it's likely the configuration file for a daemon.
Let's look at the file's contents: grep -v '#' mysql.conf.d/mysqld.cnf | grep -v '^$'
Note
The grep command is a command used for applying (very complicated, should you need it) pattern matching against text. Above I've used a simple match on the # character, but in then I've matched on a regular expression: ^$. The manual page for grep is (you guessed it): man grep
I strongly suggest you review the manual page and get a feel for some simple grep commands. It has a section on "Regular Expressions" and at the bottom, a section called EXAMPLE that's also useful.
1 2 3 4 5 6 7 8 | |
I've stripped everything else from the file so that we can focus on what's currently being set for the current server as it's running now. There are a lot of default values set behind the scenes, too.
There are two settings defined, above, of importance to us: bind-address and log_error.
The bind_address is the network IP address that MySQL Server will "bind" to. That is, MySQL Server will "bind" a network socket to the IP address 127.0.0.1 (the loopback address, also known by its hostname localhost) on TCP/3306. The port number 3306 isn't shown above because the default value is, in fact 3306. I suggest leaving this as is unless you have a (good) reason to change it. It adds very little to zero security benefit to change the default port.
And then we have the log_error option, which has a value of /var/log/mysql/error.log. Let's quickly look inside that file: cat /var/log/mysql/error.log
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
That's a lot of information. The only reason I want you to know about this file is simple: if there is an error or problem with your MySQL installation, this should contain information about the problem.
The concept of the log file or "error log" applies to a lot of other services and software too - they write log files we can use to get information about the services and what they're doing, or failing to do, as they operate. Not all services do this, but most of the services running most of the Internet (like MySQL, nginx, Apache, etc.) do write log files and you can even highly customise the logs to get less or more information out of them. The lesson here is: get to understand where a service or process is writing its log files to so you can investigate problems.
And of course the concept of the configuration file also applies to most other services you'll find in the wild. We've identified the location of the configuration file (or potentially files because of the !includedir option) and then reviewed the file so that we know how MySQL Server is configured to run.
Next#
We don't need to change any MySQL configuration at this point in time. Next we're going to look at backing up a database and restoring it.