关于MySQL的init-file选项的用法实例

这段时间失业中,刚好在家有大把的时间学习ORACLE和MySQL.顺便也把PHP捡起来。逛逛论坛。
今天论坛上有人问起,刚好写个例子,贴上来。^_^
init-file 是在MySQL启动的时候加载的脚本。
有两个要注意的。
1. 确保你的mysqld 编译的时候没有加  --disable-grant-options 开关。
2. 确保init-file指定的脚本每行一个具体的语句。

使用方法很简单,直接添加到配置文件,比如my.cnf.
添加:
[server] 或者 [mysqld] 或者 [mysqld_safe]
init-file="Your file location"
重启mysqld 就可以看到效果了。
我来做个简单的例子。利用init-file来生成一个CACHE表的数据。
环境: Vbox 虚拟机 Ubuntu 32Bit, MySQL 5.1.30, 启动脚本/home/david/script/control_db
root@david-desktop:/var/log/mysql # /home/david/scripts/control_db enter
Enter password:
...
mysql> use ytt;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> create table ytt_test ( id int unsigned not null, suffix tinyint unsigned not null, primary key(id,suffix));
Query OK, 0 rows affected (0.00 sec)
mysql> insert into ytt_test (id,suffix) values (1,10),(1,20),(1,50),(1,52),(2,55),(2,1),(2,30),
    ->(2,80),(3,100),(3,22),(3,4),(4,50),(4,20),(4,2),(5,10),(5,90);
Query OK, 16 rows affected (0.00 sec)
Records: 16  Duplicates: 0  Warnings: 0
简单的CACHE表。
mysql> create table ytt_test_heap engine memory select * from ytt_test where 0;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

任务就是取到每个分组的最大值。
mysql> select a.* from ytt_test as a where suffix = (select max(suffix) from ytt_test where id = a.id);
+----+--------+
| id | suffix |
+----+--------+
|  1 |     52 |
|  2 |     80 |
|  3 |    100 |
|  4 |     50 |
|  5 |     90 |
+----+--------+
5 rows in set (0.02 sec)
然后放到CACHE表中。关于SQL语句优化方面我另外会写的。现在时间多啊。
现在搞init-file
加如下部分到my.cnf
[server]
init-file=/home/david/i.e/init.file

文件/home/david/i.e/init.file 内容很简单,如下:
use ytt;
insert into ytt_test_heap select a.* from ytt_test as a where suffix = (select max(suffix) from ytt_test where id = a.id);
给相应的权限。
root@david-desktop:/var/log/mysql # chown -R mysql.mysql /home/david/i.e/init.file
root@david-desktop:/var/log/mysql # chmod 0660 /home/david/i.e/init.file
然后重启 mysqld.
root@david-desktop:/var/log/mysql # /home/david/scripts/control_db stop
root@david-desktop:/var/log/mysql # /home/david/scripts/control_db start
root@david-desktop:/var/log/mysql # /home/david/scripts/control_db enter
Enter password:
...
mysql> select * from ytt_test_heap;
+----+--------+
| id | suffix |
+----+--------+
|  1 |     52 |
|  2 |     80 |
|  3 |    100 |
|  4 |     50 |
|  5 |     90 |
+----+--------+
5 rows in set (0.00 sec)
看到效果了吧。

本文出自 “上帝,咱们不见不散!” 博客,请务必保留此出处http://yueliangdao0608.blog.51cto.com/397025/123538

转载于:https://my.oschina.net/u/585111/blog/219459

mkdir -p /data/330{7,8,9}/data 2.5.2 准备配置文件 cat > /data/3307/my.cnf <<EOF[mysqld] basedir=/app/mysql datadir=/data/3307/data socket=/data/3307/mysql.sock log_error=/data/3307/mysql.log port=3307 server_id=7 log_bin=/data/3307/mysql-binEOF cat > /data/3308/my.cnf <<EOF[mysqld] basedir=/app/mysql datadir=/data/3308/data socket=/data/3308/mysql.sock log_error=/data/3308/mysql.log port=3308 server_id=8 log_bin=/data/3308/mysql-binEOF cat > /data/3309/my.cnf <<EOF[mysqld] basedir=/app/mysql datadir=/data/3309/data socket=/data/3309/mysql.sock log_error=/data/3309/mysql.log port=3309 server_id=9 log_bin=/data/3309/mysql-binEOF 2.5.3 初始化三套数据 mv /etc/my.cnf /etc/my.cnf.bak mysqld --initialize-insecure --user=mysql --datadir=/data/3307/data --basedir=/app/mysql mysqld --initialize-insecure --user=mysql --datadir=/data/3308/data --basedir=/app/mysql mysqld --initialize-insecure --user=mysql --datadir=/data/3309/data --basedir=/app/mysql 2.5.4 systemd管理多实例 cd /etc/systemd/system cp mysqld.service mysqld3307.service cp mysqld.service mysqld3308.service cp mysqld.service mysqld3309.service vim mysqld3307.serviceExecStart=/app/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf vim mysqld3308.serviceExecStart=/app/mysql/bin/mysqld --defaults-file=/data/3308/my.cnf vim mysqld3309.serviceExecStart=/app/mysql/bin/mysqld --defaults-file=/data/3309/my.cnf 2.5.5 授权 chown -R mysql.mysql /data/* 2.5.6 启动 systemctl start mysqld3307.service systemctl start mysqld3308.service systemctl start mysqld3309.service 2.5.7 验证多实例 netstat -lnp|grep 330 mysql -S /data/3307/mysql.sock -e "select @@server_id" mysql -S /data/3308/mysql.sock -e "select @@server_id" mysql -S /data/3309/mysql.sock -e "select @@server_id"
最新发布
08-14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值