一、需求
1.配置多实例数据库
2.做多实例的主从同步
3.做多台服务器的主从同步
二、MySQL-5.6二进制安装(自定义目录安装)
[root@db03 ~]# mkdir /service
[root@db03 ~]# cd /service
#卸载mariadb
[root@db03 /service]# yum remove -y mariadb-libs
#创建mysql用户
[root@db03 /service]# useradd mysql
#安装依赖
[root@db03 /service]# yum install -y ncurses-devel libaio-devel cmake glibc autoconf gcc-c++
#下载
[root@db03 /service]# wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.6.42-linux-glibc2.12-x86_64.tar.gz
[root@db03 ~]# mv mysql-5.6.42-linux-glibc2.12-x86_64 /service/mysql-5.6.42
[root@db03 ~]# ln -s /service/mysql-5.6.42 /service/mysql
#拷贝启动文件和配置文件
[root@db03 ~]# cd /service/mysql/support-files/
[root@db03 /service/mysql/support-files]# cp my-default.cnf /etc/my.cnf
cp: overwrite '/etc/my.cnf'? y
[root@db03 /service/mysql/support-files]# cp mysql.server /etc/init.d/mysqld
#初始化
[root@db03 ~]# cd /service/mysql/scripts/
[root@db03 /service/mysql/scripts]# ./mysql_install_db --user=mysql --basedir=/service/mysql --datadir=/service/mysql/data
#配置systemd管理
[root@db03 ~]# vim /usr/lib/systemd/system/mysqld.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=https://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
ExecStart=/service/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf
LimitNOFILE = 5000
[root@db03 ~]# systemctl daemon-reload
#启动数据库
#1.使用system启动
[root@db03 ~]# systemctl start mysqld
#查看进程启动失败,没有任何报错
#2.使用mysqld启动脚本启动
[root@db03 ~]# /etc/init.d/mysqld start
/etc/init.d/mysqld: line 244: my_print_defaults: command not found
/etc/init.d/mysqld: line 264: cd: /usr/local/mysql: No such file or directory
Starting MySQL ERROR! Couldn't find MySQL server (/usr/local/mysql/bin/mysqld_safe)'
#原因:二进制的包是源码包已经生成编译安装完成的,在cmake阶段已经指定了所有的目录都是/usr/local/mysql,所以启动时所有程序都去找/usr/local/mysql目录,没有该目录,所以启动失败
#3.解决启动问题
1)方法一:做软连接
[root@db03 ~]# ln -s /service/mysql /usr/local/mysql
2)方法二:修改启动文件
[root@db03 ~]# vim /etc/init.d/mysqld
basedir=/service/mysql
datadir=/service/mysql/data
#4.再次测试启动
[root@db03 ~]# /etc/init.d/mysqld start
Starting MySQL. SUCCESS!
#或者
[root@db03 ~]# systemctl start mysqld
#设置环境变量
[root@db03 ~]# vim /etc/profile.d/mysql.sh
export PATH=/service/mysql/bin:$PATH
[root@db02 ~]# source /etc/profile
三、配置多实例
[root@db01 ~]# cd /usr/local/
[root@db01 /usr/local]# mkdir {3307,3308,3309}
#配置多实例配置文件
[root@db01 /usr/local]# vim 3307/my.cnf
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/3307/data
port=3307
socket=/usr/local/3307/data/mysql.sock
server_id=7
log-error=/usr/local/3307/data/mysql.err
[root@db01 /usr/local]# cat 3308/my.cnf
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/3308/data
port=3308
socket=/usr/local/3308/data/mysql.sock
server_id=8
log-error=/usr/local/3308/data/mysql.err
[root@db01 /usr/local]# cat 3309/my.cnf
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/3309/data
port=3309
socket=/usr/local/3309/data/mysql.sock
server_id=9
log-error=/usr/local/3309/data/mysql.err
#初始化多实例
[root@db01 /usr/local]# cd mysql/scripts/
[root@db01 /usr/local/mysql/scripts]# ./mysql_install_db --defaults-file=/usr/local/3307/my.cnf --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/3307/data
[root@db01 /usr/local/mysql/scripts]# ./mysql_install_db --defaults-file=/usr/local/3308/my.cnf --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/3308/data
[root@db01 /usr/local/mysql/scripts]# ./mysql_install_db --defaults-file=/usr/local/3309/my.cnf --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/3309/data
#查看是否生成文件
[root@db01 /usr/local]# tree -L 2 330*
3307
├── data
│ ├── auto.cnf
│ ├── db01.pid
│ ├── ibdata1
│ ├── ib_logfile0
│ ├── ib_logfile1
│ ├── mysql
│ ├── mysql.err
│ ├── performance_schema
│ └── test
└── my.cnf
3308
├── data
│ ├── auto.cnf
│ ├── db01.pid
│ ├── ibdata1
│ ├── ib_logfile0
│ ├── ib_logfile1
│ ├── mysql
│ ├── mysql.err
│ ├── performance_schema
│ └── test
└── my.cnf
3309
├── data
│ ├── auto.cnf
│ ├── db01.pid
│ ├── ibdata1
│ ├── ib_logfile0
│ ├── ib_logfile1
│ ├── mysql
│ ├── mysql.err
│ ├── performance_schema
│ └── test
└── my.cnf
[root@db01 /usr/local]# chown -R mysql.mysql 330*
#启动多实例
[root@db01 ~]# mysqld_safe --defaults-file=/usr/local/3307/my.cnf &
[root@db01 ~]# mysqld_safe --defaults-file=/usr/local/3308/my.cnf &
[root@db01 ~]# mysqld_safe --defaults-file=/usr/local/3309/my.cnf &
#停止多实例
[root@db01 ~]# mysqladmin -S /usr/local/3307/data/mysql.sock shutdown
#验证启动
[root@db01 /usr/local]# netstat -lntp | grep 330
tcp6 0 0 :::3306 :::* LISTEN 7542/mysqld
tcp6 0 0 :::3307 :::* LISTEN 8429/mysqld
tcp6 0 0 :::3308 :::* LISTEN 7876/mysqld
tcp6 0 0 :::3309 :::* LISTEN 8040/mysqld
#登录验证多实例
[root@db01 ~]# mysql -uroot -S /usr/local/3307/data/mysql.sock -e 'show variables like "server_id"'
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 7 |
+---------------+-------+
[root@db01 ~]# mysql -uroot -S /usr/local/3308/data/mysql.sock -e 'show variables like "server_id"'
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 8 |
+---------------+-------+
[root@db01 ~]# mysql -uroot -S /usr/local/3309/data/mysql.sock -e 'show variables like "server_id"'
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 9 |
+---------------+-------+
#多实例设置密码
[root@db01 ~]# mysqladmin -uroot password -S /usr/local/3307/data/mysql.sock
New password: 123
Confirm new password: 123
[root@db01 ~]# mysqladmin -uroot password -S /usr/local/3308/data/mysql.sock
New password: 123
Confirm new password: 123
[root@db01 ~]# mysqladmin -uroot password -S /usr/local/3309/data/mysql.sock
New password: 123
Confirm new password: 123
#配置简单连接数据库多实例
[root@db01 ~]# cat /usr/bin/mysql3307
mysql -uroot -p123 -S /usr/local/3307/data/mysql.sock
[root@db01 ~]# cat /usr/bin/mysql3308
mysql -uroot -p123 -S /usr/local/3308/data/mysql.sock
[root@db01 ~]# cat /usr/bin/mysql3309
mysql -uroot -p123 -S /usr/local/3309/data/mysql.sock
[root@db01 ~]# chmod +x /usr/bin/mysql*
#直接使用命令连接
[root@db01 ~]# mysql3307
[root@db01 ~]# mysql3308
[root@db01 ~]# mysql3309
四、数据库多实例主从
1.配置主库
#配置主库的binlog
[root@db01 /usr/local]# cat 3307/my.cnf
..... .......
log_bin=/usr/local/3307/data/mysql-bin
[root@db01 /usr/local]# mysqladmin -uroot -p123 -S /usr/local/3307/data/mysql.sock shutdown
[root@db01 /usr/local]# mysqld_safe --defaults-file=/usr/local/3307/my.cnf &
#主库授权主从的用户
[root@db01 /usr/local]# mysql3307
mysql> grant replication slave on *.* to zzc@'localhost' identified by '123';
Query OK, 0 rows affected (0.07 sec)
#主库查看binlog信息
mysql> show master status;
+-------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| mysql-sbin.000001 | 736 | | | |
+-------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
2.配置从库同步主库
[root@db01 /usr/local]# mysql3308
mysql> change master to
-> master_host='127.0.0.1',
-> master_port=3307,
-> master_user='zzc',
-> master_password='123',
-> master_log_file='mysql-sbin.000001',
-> master_log_pos=736;
#启动主从同步
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
#查看主从状态
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 127.0.0.1
Master_User: zzc
Master_Port: 3307
Connect_Retry: 60
Master_Log_File: mysql-sbin.000001
Read_Master_Log_Pos: 736
Relay_Log_File: db01-relay-bin.000002
Relay_Log_Pos: 284
Relay_Master_Log_File: mysql-sbin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
[root@db01 ~]# mysql3309
mysql> change master to
-> master_host='127.0.0.1',
-> master_port=3307,
-> master_user='zzc',
-> master_password='123',
-> master_log_file='mysql-sbin.000001',
-> master_log_pos=1120;
Query OK, 0 rows affected, 2 warnings (0.01 sec)
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 127.0.0.1
Master_User: zzc
Master_Port: 3307
Connect_Retry: 60
Master_Log_File: mysql-sbin.000001
Read_Master_Log_Pos: 1120
Relay_Log_File: db01-relay-bin.000002
Relay_Log_Pos: 284
Relay_Master_Log_File: mysql-sbin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes