introduction
 
 
MySQL is a relational 
database management system developed by the Swedish MySQL AB company and currently belongs to Oracle's products. MySQL is one of the most popular relational database management systems. In terms of web applications, MySQL is the best RDBMS (Relational Database Management System) application software.
 
 MySQL is a relational database management system. Relational databases store data in different tables instead of putting all data in one large warehouse, which increases speed and flexibility.
 
 
MySQL
 
 Questions about how to change the datadir directory:
 
 When ubuntu installs mysql by default, it will set datadir to
 
 /var/lib/mysql
 
 Below, but most of the time we need to specify a directory that we have prepared for easy searching as the data storage directory, we can
 
 my.cnf
 
 Change below
 
 datadir
 
 This line will be'
 
 =
 
 'The following directory can be changed to our own directory.
 
 For example: I changed datadir to
 
 /data
 
 , Then make the following changes in my.cnf, in
 
 [mysqld]
 
 segment
 
 port = 3306
 
 basedir = /usr
 
 datadir = /data/mysql
 
 After the changes are completed, save and exit, you can restart the mysql service. I don't know if your server will report an error. My mysql can't get up anyway. Just change the datadir back to start. The reason for this problem is that there is an apparmor service in ubuntu.
 
 The main function of this service is to set the access control authority of an executable program, which can restrict the program to read/write a certain directory/file, open/read/write network ports, and so on. (It turned out that although we said that the owner of the new directory was changed to mysql, we did not tell mysql what permissions to give to the new directory, so it was a tragedy)
 
 His profile is in
 
 /etc/apparmor.d/
 
 In, here we can see a
 
 usr.sbin.mysqld
 
 The configuration file, open it and see it. Our log path, pid path, etc. are all stored here, so we need to change the datadir path, which also needs to be changed here. If you want to change the log path, you must also change it here. The configuration after the change is as follows:
 
 /logs/mysql/mysql.log rw,
 
 /logs/mysql/mysql.err.log rw,
 
 /data/mysql/ r,
 
 /data/mysql/** rwk,
 
 /logs/mysql/ r,
 
 /logs/mysql/* rw,
 
 This is the path I changed. After the change is completed, because this is a service, we need to restart this service.
 
 /etc/init.d/apparmor restart
 
 There is basically no problem here, (I just restarted the server here and it was OK), if you still can’t start your mysql, then please use the following command
 
 mysql_install_db --datadir=/data/mysql
 
 Check if there is an error message, and check according to the error.
 
 Finally the problem was solved according to this method. Thank you, senior.
 
 Finally, I make a summary, just as an attempted solution:
 
 Change the mysql default datadir directory "/var/lib/mysql" to "/home/mysql_data"
 
 1. Turn off the database
 
 sudo /etc/init.d/mysql stop
 
 2. Because the database file directory we specified is /home/mysql_data
 
 cd /home //Open home
 
 mkdir mysql_data //Create a directory
 
 chown mysql:mysql mysql_data //and modify its owner and group to mysql:mysql.command
 
 //Modify the mysql configuration file my.cnf:
 
 Change datadir=/var/lib/mysql to datadir=/home/mysql_data
 
 3. Modify the security settings in ubuntu
 
 sudo gedit /etc/apparmor.d/usr.sbin.mysqld
 
 Add permission settings in this file to change the original
 
 /var/lib/mysql/ r,
 
 /var/lib/mysql/** rwk,
 
 Replace with (or add directly)
 
 /home/mysql_data/mysql/ r,
 
 /home/mysql_data/mysql/** rwk,
 
 4. Reinitialize the data file: execute
 
 sudo mysql_install_data
 
 5. Start the mysql database service (or restart the server):
 
 sudo /etc/init.d/mysql start
 
 The most worth mentioning of this method is the modification
 
 /etc/apparmor.d/usr.sbin.mysqld
 
 This file changes the permissions of the application.
 
 MySQL index implementation
 
 In MySQL, the index belongs to the concept of the storage engine level. Different storage engines implement indexes in different ways. This article mainly discusses the index implementation methods of the MyISAM and InnoDB storage engines.
 
 MyISAM index implementation
 
 The MyISAM engine uses B+Tree as the index structure, and the data field of the leaf node stores the address of the data record.
 
 There are three columns in the table here, suppose we use Col1 as the primary key. It can be seen that the MyISAM index file only saves the address of the data record. In MyISAM, there is no difference in structure between the primary index and the secondary index (Secondary key), but the primary index requires the key to be unique, and the key of the secondary index can be repeated.
 
 
 It is also a B+Tree, and the data field saves the address of the data record. Therefore, the index retrieval algorithm in MyISAM is to first search the index according to the B+Tree search algorithm. If the specified Key exists, then take out the value of its data field, and then use the value of the data field as the address to read the corresponding data record.
 
 MyISAM's indexing method is also called "non-clustered", and the reason for this is to distinguish it from InnoDB's clustered index.