1 下载安装MySQL
从MySQL官网下载MySQL最新的稳定版二进制安装包,这里下载的8.0.32的最小二进制包,大小才58M,下载之后解压到指定位置,tar命令的-C参数可以指定文件的解压位置,根据linux的使用习惯,将文件解压至/usr/local目录下
[root@localhost] tar -xvf mysql-8.0.32-linux-glibc2.17-x86_64-minimal.tar.xz -C /usr/local
解压后MySQL安装目录是mysql-8.0.32-linux-glibc2.17-x86_64-minimal,这个目录太长了,引用起来太麻烦,给它创建一个软链接。
[root@localhost] ln -s /usr/local/mysql-8.0.32-linux-glibc2.17-x86_64-minimal /usr/local/mysql
创建软链接之后,就可以使用/usr/local/mysql来引用MySQL的安装目录了,这个做还有一个好处是,如果需要切换或者更改MySQL的版本,只需要删除这个软链接,重新建一个至新版本的软链接。
2 创建MySQL数据库
2.1 创建MySQL用户及组
尽管可以使用root用户来启动MySQL数据库,基于安全方面的考虑,官网还是推荐为MySQL数据库创建一个单独的用户,根据一般的命名习惯,这个用户一般是mysql,多个数据库可以使用同一个用户。
[root@localhost]# groupadd mysql[root@localhost]# useradd -g mysql -s /bin/false mysql
2.2 创建数据目录
在/data目录下创建三个数据库的数据目录,每个数据库使用自己单独的数据目录,更改目录属主及权限
[root@localhost]# chown mysql:mysql /data/data1[root@localhost]# chown mysql:mysql /data/data2[root@localhost]# chown mysql:mysql /data/data3[root@localhost]# chmod 750 /data/data1[root@localhost]# chmod 750 /data/data2[root@localhost]# chmod 750 /data/data3
2.3 初始化数据目录
为了简单起见,这里使用非安全化的初始化,root用户的初始化密码为空
[root@localhost]bin/mysqld --initialize-insecure --user=mysql \ --basedir=/usr/local/mysql \ --datadir=/data/data3 [root@localhost]bin/mysqld --initialize-insecure --user=mysql \ --basedir=/usr/local/mysql \ --datadir=/data/data2 [root@localhost]bin/mysqld --initialize-insecure --user=mysql \ --basedir=/usr/local/mysql \ --datadir=/data/data3
3 配置多个实例使用systemctl启动
3.1 准备MySQL配置文件
编辑/etc/my.cnf文件,将原来的内容清除,加入以下内容
[root@localhost]# cat my.cnf [mysqld@master] socket = /tmp/mysql.sock1 port = 3306 pid-file = /data/data1/hostname.pid basedir = /usr/local/mysql/ datadir = /data/data1 user = mysql server_id = 1 [mysqld@slave1] socket = /tmp/mysql.sock2 port = 3307 pid-file = /data/data2/hostname.pid basedir = /usr/local/mysql/ datadir = /data/data2 user = mysql server_id = 2 [mysqld@slave2] socket = /tmp/mysql.sock3 port = 3308 pid-file = /data/data3/hostname.pid basedir = /usr/local/mysql/ datadir = /data/data3 user = mysql server_id = 3
上面的文件定义了三个MySQL实例,@是限定符,systemctl只支持这一个限定符,因此这里没有别的选择。[mysqld@master]定义了master实例自己的参数,因为这三个实例在一台服务器上启动,必须指定不同的sock,pid(目录不同),端口。这三个数据库配置中相同的部分可以写在[mysqld]下。
3.2 准备MySQL服务文件
进入/usr/lib/systemd/system目录下,创建mysqld@.service文件,在多个实例的情况下,MySQL服务文件名字不能是mysqld.service,必须是mysqld@.service。
[root@localhost] cd /usr/lib/systemd/system [root@localhost] touch mysqld@.service [root@localhost] chmod 644 mysqld@.service
创建文件后,在文件中加入以下内容
[Unit] Description=MySQL Server Documentation=man:mysqld(8) Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html After=network.target After=syslog.target [Install] WantedBy=multi-user.target [Service] User=mysql Group=mysql # Have mysqld write its state to the systemd notify socket Type=notify # Disable service start and stop timeout logic of systemd for mysqld service. TimeoutSec=0 # Start main service ExecStart=/usr/local/mysql/bin/mysqld --defaults-group-suffix=@%I --defaults-file=/etc/my1.cnf $MYSQLD_OPTS # Use this to switch malloc implementation EnvironmentFile=-/etc/sysconfig/mysql # Sets open_files_limit LimitNOFILE = 10000 Restart=on-failure RestartPreventExitStatus=1 # Set environment variable MYSQLD_PARENT_PID. This is required for restart. Environment=MYSQLD_PARENT_PID=1 PrivateTmp=false
这个文件中的绝大部分内容和官网上的示例文件相同,只有# Start main service下的ExecStart例外,mysqld的启动选项里多了一个–defaults-group-suffix选项,这里指定的sysemd组后缀,限定符必须是@,后缀最后的部分可以是%I,也可以是%i。使用这个选项之后,mysqld进程在启动MySQL时,会按照[server], [mysqld],[mysql@I]的顺序读取配置文件的内容。编辑好MySQL的服务器文件后,需要重载systemctl后台进程,使服务生效。
[root@localhost] systemctl daemon-reload
3.3 启动MySQL示例,检查mysqld进程状态
使用systemctl启动MySQL,命令如下:
[root@localhost]systemctl start mysqld@master systemctl start mysqld@slave1 systemctl start mysqld@slave2