MySQL InnoDB 集群配置实例
基础配置
初始化实例后,在对应目录下编写配置文件
提示:请关注下章节 高并发语句导致备机宕机 列出的配置优化部分,避免线上高并发导致宕机。
在 data/s1
目录下,创建文件 my.cnf
,配置如下:
[mysqld]
# server configuration
datadir=/home/mysql/data/s1
basedir=/home/mysql/mysql-5.7/
report_host=ic-1
port=24801
socket=/home/mysql/data/s1/mysql.sock
在 data/s2
目录下,创建文件 my.cnf
,配置如下:
[mysqld]
# server configuration
datadir=/home/mysql/data/s2
basedir=/home/mysql/mysql-5.7/
report_host=ic-2
port=24802
socket=/home/mysql/data/s2/mysql.sock
在 data/s3 目录下,创建文件 my.cnf
,配置如下:
[mysqld]
# server configuration
datadir=/home/mysql/data/s3
basedir=/home/mysql/mysql-5.7/
report_host=ic-3
port=24803
socket=/home/mysql/data/s3/mysql.sock
在 /home/mysql
目录下,可以使用如下命令启动数据库实例:
mysqld --defaults-file=data/s1/my.cnf --user=root
为了方便,我们使用启动脚本来启动,在数据库目录 data/s1
下新增脚本 start.sh
和 shutdown.sh
。直接执行对应脚本即可。注:start.sh
脚本里务必设置主机名,防止重启机器后,主机名改变导致集群无法使用!
start.sh脚本:
#!/bin/sh
#设置机器主机名为localhost
hostname localhost
dir=$(cd $(dirname $0); pwd)
mysqladmin shutdown -S ${dir}/mysql.sock
mysqld --defaults-file=${dir}/my.cnf --user=root >>${dir}/mysqld.log 2>&1 &
tail -f ${dir}/mysqld.log
shutdown.sh脚本:
#!/bin/sh
dir=$(cd $(dirname $0); pwd)
mysqladmin shutdown -S ${dir}/mysql.sock
启动完成后,使用 mysqlShell 登录数据库:
mysqlsh --log-level=DEBUG3
dba.verbose=2
或者直接使用命令:
mysqlsh
建议使用第一种方式,操作时会显示详细日志数据,方便调试。使用命令 shell.connect('root@localhost:24801')
登录数据库,这里 root 用户在本机使用时,没有密码。命令 dba.help()
可以查询集群操作指令的帮助信息。
集群环境配置
在使用数据库实例搭建集群前,需要检查实例是否满足集群配置。需要使用命令 dba.checkInstanceConfiguration()
检查。这里执行 dba.checkInstanceConfiguration('root@localhost:24801')
命令,返回结果如下:
mysql-js> dba.checkInstanceConfiguration('root@localhost:24801')
Please provide the password for 'root@localhost:24801':
Validating instance...
The instance 'localhost:24801' is not valid for Cluster usage.
The following issues were encountered:
- Some configuration options need to be fixed.
+----------------------------------+---------------+----------------+--------------------------------------------------+
| Variable | Current Value | Required Value | Note |
+----------------------------------+---------------+----------------+--------------------------------------------------+
| binlog_checksum | CRC32 | NONE | Update the server variable or restart the
server |
| enforce_gtid_consistency | OFF | ON | Restart the server |
| gtid_mode | OFF | ON | Restart the server |
| log_bin | 0 | 1 | Restart the server |
| log_slave_updates | 0 | ON | Restart the server |
| master_info_repository | FILE | TABLE | Restart the server |
| relay_log_info_repository | FILE | TABLE | Restart the server |
| transaction_write_set_extraction | OFF | XXHASH64 | Restart the server |
+----------------------------------+---------------+----------------+--------------------------------------------------+
Please fix these issues, restart the server and try again.
{
"config_errors": [
{
"action": "server_update",
"current": "CRC32",
"option": "binlog_checksum",
"required": "NONE"
},
{
"action": "restart",
"current": "OFF",
"option": "enforce_gtid_consistency",
"required": "ON"
},
{
"action": "restart",
"current": "OFF",
"option": "gtid_mode",
"required": "ON"
},
{
"action": "restart",
"current": "0",
"option": "log_bin",
"required": "1"
},
{
"action": "restart",
"current": "0",
"option": "log_slave_updates",
"required": "ON"
},
{
"action": "restart",
"current": "FILE",
"option": "master_info_repository",
"required": "TABLE"
},
{
"action": "restart",
"current": "FILE",
"option": "relay_log_info_repository",
"required": "TABLE"
},
{
"action": "restart",
"current": "OFF",
"option": "transaction_write_set_extraction",
"required": "XXHASH64"
}
],
"errors": [],
"restart_required": true,
"status": "error"
}
可以看到当前实例不满足条件,AdminAPI 提供了命令 dba.configureLocalInstance()
来帮助修改实例的配置文件,确保实例可以满足集群的条件。虽然可以手动修改配置文件,但是强烈建议使用 AdminAPI 来操作,避免配置出错。配置完成后,必须重启数据库实例确保配置生效。
使用 dba.configureLocalInstance()
会校验对应用户是否有合适的访问权限,root 用户默认不允许其它服务器登录,这里有3个选项供选择。我们选择第一个,为 root 用户授权所需权限。
执行命令如下图,注意 mysql 的配置路径务必指定正确,注意这里设置了 root 用户的非本机访问所用密码。同样的方式,将实例2、实例3也按照同样的方式配置。确保三个数据库实例都满足集群要求。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论