这可能是出于多种原因,例如需要隔离不同的数据库环境、测试新版本MySQL、或是因为资源限制而需要在同一台物理机上部署多个数据库服务等
在Ubuntu上安装和管理多个MySQL实例虽然可能看起来复杂,但只要按照正确的步骤进行,完全可以实现高效且稳定的多实例运行
本文将详细介绍如何在Ubuntu上安装和管理多个MySQL实例
一、准备工作 在开始之前,请确保你的Ubuntu系统已经更新到最新版本,并且具备root权限或能够通过sudo执行管理员命令
以下是准备工作的一些关键步骤: 1.更新系统软件包列表: bash sudo apt update sudo apt upgrade -y 2.安装必要的依赖: 虽然MySQL本身会安装一些必要的依赖,但提前安装一些基础工具(如`wget`、`vim`等)会让后续操作更加方便
bash sudo apt install -y wget vim 二、安装第一个MySQL实例 首先,我们安装一个标准的MySQL实例
这将作为我们的基础安装,后续的实例将基于这个基础进行配置
1.安装MySQL Server: bash sudo apt install -y mysql-server 2.配置MySQL: 在安装过程中,MySQL会提示你进行一些基本配置,如设置root密码、配置MySQL AppArmor等
按照提示完成配置
3.启动并检查MySQL服务: bash sudo systemctl start mysql sudo systemctl status mysql 4.安全配置: 运行`mysql_secure_installation`进行安全配置,包括删除匿名用户、禁止root远程登录、删除测试数据库等
三、安装和管理多个MySQL实例 安装和管理多个MySQL实例的核心在于为每个实例创建独立的配置文件、数据目录和端口号
以下是详细步骤: 1. 创建MySQL实例目录结构 为每个MySQL实例创建一个独立的目录结构,包括数据目录、配置文件目录和socket文件目录
bash sudo mkdir -p /var/lib/mysql3307 /etc/mysql/mysql3307.cnf.d /var/run/mysqld/mysql3307 sudo chown -R mysql:mysql /var/lib/mysql3307 /var/run/mysqld/mysql3307 2. 创建MySQL实例配置文件 每个MySQL实例需要有自己的配置文件
在`/etc/mysql/mysql3307.cnf.d/`目录下创建一个配置文件,例如`mysqld.cnf`
bash sudo nano /etc/mysql/mysql3307.cnf.d/mysqld.cnf 在文件中添加以下内容(根据你的需求调整路径和端口号): ini 【mysqld】 user = mysql pid-file = /var/run/mysqld/mysql3307/mysqld.pid socket = /var/run/mysqld/mysql3307/mysqld.sock port =3307 basedir = /usr datadir = /var/lib/mysql3307 tmpdir = /tmp lc-messages-dir = /usr/share/mysql skip-external-locking bind-address =127.0.0.1 InnoDB settings innodb_data_home_dir = /var/lib/mysql3307 innodb_data_file_path = ibdata1:10M:autoextend:max:64M innodb_log_group_home_dir = /var/lib/mysql3307 innodb_buffer_pool_size =128M innodb_log_file_size =50M innodb_log_buffer_size =8M innodb_flush_log_at_trx_commit =1 innodb_file_per_table =1 innodb_flush_method = O_DIRECT Logging log-error = /var/log/mysql/error3307.log slow-query-log-file = /var/log/mysql/mysql-slow3307.log long_query_time =2 log-queries-not-using-indexes =1 Other important settings max_connections =500 query_cache_size =0 table_open_cache =400 tmp_table_size =256M max_heap_table_size =256M Character set settings character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci 【client】 socket = /var/run/mysqld/mysql3307/mysqld.sock port =3307 !includedir /etc/mysql/conf.d/ 3.初始化MySQL实例数据目录 使用`mysqld --initialize`命令初始化新的MySQL实例数据目录
bash sudo mysqld --initialize --user=mysql --datadir=/var/lib/mysql3307 4. 创建MySQL实例服务文件 在`/etc/systemd/system/`目录下创建一个新的服务文件,例如`mysql3307.service`
bash sudo nano /etc/systemd/system/mysql3307.service 在文件中添加以下内容: ini 【Unit】 Description=MySQL Server3307 After=network.target After=syslog.target 【Service】 User=mysql Group=mysql ExecStart=/usr/sbin/mysqld --defaults-file=/etc/mysql/mysql3307.cnf.d/mysqld.cnf PIDFile=/var/run/mysqld/mysql3307/mysqld.pid LimitNOFILE =5000 【Install】 WantedBy=multi-user.target 5. 启动并管理MySQL实例 重新加载systemd服务配置,启动并检查MySQL实例服务
bash sudo systemctl daemon-reload sudo systemctl start mysql3307 sudo systemctl status mysql3307 6. 设置MySQL实例开机自启 bash sudo systemctl enable mysql3307 7. 安全配置新实例 运行`mysql_secure_installation`命令对新实例进行安全配置
由于MySQL实例运行在不同的端口,你需要指定端口进行连接
bash mysql_secure_installation --socket=/var/run/mysqld/mysql3307/mysqld.sock --port=3307 四、管理多个MySQL实例 管理多个MySQL实例时,可以使用以下命令来切换实例: bash 连接到第一个实例(默认端口3306) mysql -u root -p 连接到第二个实例(端口3307) mysql -u root -p --socket=/var/run/mysqld/mysql3307/mysqld.sock --port=3307 为了简化连接,可以在`~/.my.cnf`文件中为每个实例配置登录信息
ini