主要用途:通过一条命令管理主机上的多个mysql instance,效果如下:
步骤:
1. 安装软件:
unzip mysql-advanced-5.7.23-linux-glibc2.12-x86_64.tar.gz
设置环境变量:
vi ~/.bash_profile
# added for mysql
MYSQL_HOME=/u01/app/oracle/product/mysql
MYSQLDATADIR=/oradata01/wshi_data
export PATH=${MYSQL_HOME}/bin:.:$PATH
export PS1="
`hostname -s`*\${mysqlid}-\${PWD}
>"
alias alert1="tail -f ${MYSQLDATADIR}/db1/logs/error_*.log"
alias alert2="tail -f ${MYSQLDATADIR}/db2/logs/error_*.log"
alias alert3="tail -f ${MYSQLDATADIR}/db3/logs/error_*.log"
alias wshi_mysql="mysql --login-path=root wshi"cd u01/app/oracle/product/mysql
创建文件目录:
mkdir -p oradata01/wshi_data/db1/data oradata01/wshi_data/db2/data oradata01/wshi_data/db3/data
mkdir -p oradata01/wshi_data/db1/logs/binlogs/ oradata01/wshi_data/db2/logs/binlogs/ oradata01/wshi_data/db3/logs/binlogs/
2. 编辑db配置文件
db1.cnf
[mysqld]
socket=/tmp/mysql_wshi_db1.sock
port=3306
datadir=/oradata01/wshi_data/db1/data
character-set-server=utf8mb4
innodb_buffer_pool_size=256M
innodb_undo_tablespaces=2
#innodb bin log
innodb_log_file_size=50M
innodb_log_files_in_group=3
#slow log
slow_query_log=OFF
server_id=1
log_bin=/oradata01/wshi_data/db1/logs/binlogs/wshi_binlog
max_binlog_size=10485760
binlog_format=ROW
expire_logs_days=1
user=mysql1
symbolic-links=0
[mysqld_safe]
log-error=/oradata01/wshi_data/db1/logs/error_wshi_db1.log
pid-file=/oradata01/wshi_data/db1/data/mysql_wshi_db1.pid
socket=/tmp/mysql_wshi_db1.sock
[mysqladmin]
socket=/tmp/mysql_wshi_db1.sock
[mysql]
socket=/tmp/mysql_wshi_db1.sock
[mysqldump]
socket=/tmp/mysql_wshi_db1.sock
复制db1.cnf为db2.cnf,db3.cnf并替换db1为db2/db3,修改端口和user=mysql3
3. 初始化数据库:
mysqld --defaults-file='/oradata01/wshi_data/my1.ini' --initialize
mysqld --defaults-file='/oradata01/wshi_data/my2.ini' --initialize
mysqld --defaults-file='/oradata01/wshi_data/my3.ini' --initialize
修改密码:
mysqld_safe --defaults-file='/oradata01/wshi_data/db1.cnf' --skip-grant-tables &
mysql --defaults-file='/oradata01/wshi_data/db1.cnf' -u root
update mysql.user set authentication_string=password('Root123'), password_expired= 'N', password_last_changed= now() where user= 'root';
flush privileges;"
同理在db2与db3上修改root密码:
mysql --defaults-file='/oradata01/wshi_data/db3.cnf' -u root -e "update mysql.user set authentication_string= password('Root123'), password_expired= 'N', password_last_changed= now() where user= 'root';flush privileges;"
重启数据库:
mysqladmin --defaults-file='/oradata01/wshi_data/db1.cnf' -u root -pRoot123 shutdown
mysqld_safe --defaults-file='/oradata01/wshi_data/db1.cnf' &
4. 配置mysqld_multi
vi all.cnf
>cat all.cnf
[mysqld_multi]
mysqld=/u01/app/oracle/product/mysql/bin/mysqld_safe
mysqladmin=/u01/app/oracle/product/mysql/bin/mysqladminuser='root'
password='Root_123'[mysqld1]
defaults-file='/oradata01/wshi_data/db1.cnf'
socket=/tmp/mysql_wshi_db1.sock
port = 3306
pid-file = oradata01/wshi_data/db1/data/mysql_wshi_db1.pid
datadir = oradata01/wshi_data/db1/data
user = mysql1
[mysqld2]
defaults-file='/oradata01/wshi_data/db2.cnf'
socket=/tmp/mysql_wshi_db2.sock
port = 3307
pid-file = oradata01/wshi_data/db2/data/mysql_wshi_db2.pid
datadir = oradata01/wshi_data/db2/data
user = mysql2
[mysqld3]
defaults-file='/oradata01/wshi_data/db3.cnf'
socket=/tmp/mysql_wshi_db3.sock
port = 3308
pid-file = oradata01/wshi_data/db3/data/mysql_wshi_db3.pid
datadir = oradata01/wshi_data/db3/data
user = mysql3
#注:defaults-file必须放到第一行
5. 用法:
mysqld_multi [options] {start|stop|reload|report}
reload重启,report显示数据库状态
启动数据库(不需要用户密码):
mysqld_multi --defaults-file='./all.cnf' start 1-3
停止数据库:
mysqld_multi --defaults-file='./all.cnf' --user=root --password=Root123 report|reload 1-3|1,3
注:
1. all.cnf中[mysqld_multi]的用户密码可以删除,停止数据库时必须使用--password和--user指定用户和密码。
2. reload的作用是stop然后restart,但实际中不起作用。
运行命令示例:
#显示实例1,2,3运行状态
mysqld_multi --defaults-file='./all.cnf' --user=root --password=Root123 report 1-3
#启动2,3实例
mysqld_multi --defaults-file='./all.cnf' start 2,3
#停止实例3
mysqld_multi --defaults-file='./all.cnf' --user=root --password=Root123 stop 3
--如果不想每次输入--defaults-file='./all.cnf',可以将其放到默认文件/etc/my.cnf中。