如何编写一个mysql数据库脚本

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何编写一个mysql数据库脚本相关的知识,希望对你有一定的参考价值。

参考技术A 在控制台根目录下打开sqlserver企业管理器,新建sqlserver组,根据自己的情况进行选择;然后新建sqlserver
注册,进行对sqlserver的连接。准备妥当后,下面就开始了:
首先打开数据转换服务,新建包,打开dts界面,在连接中选择数据源进行配置。再选择将要转换到的目的文件,这里我选的
textfile(destination),选择好文件的存放位置之后,我们来新建一个任务。这里我们只选择转换数据任务,将带有“选择源连接”“选择目的连接”的鼠标分别选中数据源和目的之后,我们对新生成的连接进行定义,在其属性中将源,目的,转换依次定义。
执行任务,提示成功。保存任务。然后在新建的任务上导出数据,有向导提示,其中一项选择“从源数据库复制表和视图”。
这一步已经把数据导出到目的文件中。
下一步在mysql中新建表,与将要导入的结构保持一致时,直接选取“从文本文件中提取数据,插入到数据表:”,将选项添好后,“发送”就可以了,浏览一下,数据已导入了。若要导入的表已经存在,且属性名也不同,这时就先建一个与要导入的数据相同结构的表并导入数据(按刚才的进行就可以了),然后在mysql中导出“数据和结构”,得到sql语句,将其在文本文件中编辑,利用文本编辑器的替换功能,将表名修改,列名加入,最后将其粘贴在要导入表的执行sql语句的地方,执行一下,数据便导入了。
参考技术B 导出正式服务器的数据库和测试服务器数据库,并按照指定格式命名。
打开Beyond
Compare软件,如图,选择文本比较,进入到文本比较主界面之后
,如图选择要比较的sql文件,然后,软件会呈现出如图数据库结构的不同之处。
即使在比较出两个数据库的结构不同之后,对于sql语句的小白来说,很难写出升级数据库的升级脚本,下面我们将讲解如何利用mysql
workbench来帮你写sql。
首先,在本地数据库创建test和release数据库,创建步骤如图所示。然后,将第二步导出的数据库分别导入到新建的数据库,接下来就可以对release数据库动手了。
下面以增加数据库表的一个字段为例,讲解sql语句的生成。由图中的7个步骤,便可以得到对一个表增加一个字段的sql语句,对表字段的增删改,对表内容的增删改操作,删除表操作类似可得。下面讲如何得到新建一个表的sql语句。
如图,便可得到创建表的语句。
上述的sql语句的集合便是数据库生成脚本,脚本通常是在workbench里面编辑查看和执行的,几个基本按钮的使用如图。
执行完上述sql脚本之后,正式服务器的数据库和测试服务器的数据库结构除了主键自增值,host差异之外,其余内容应全部相同,如果不是,则调整脚本内容,直至两个数据库的结构相同为止。
此时的数据库升级脚本仍为数据库升级暂时脚本,临时脚本需交由项目负责人审核检查之后,按照:工程名+版本+时间+正式+数据库升级脚本.sql保存,并上传svn,用于新版本发布。

脚本中如何"优雅"避免MySQL登录提示信息

无论是开发,还是运维,可能我们都写过Linux Shell脚本访问数据库的逻辑,以MySQL为例,登录MySQL数据库时,他会返回一些告警信息,如何优雅地屏蔽这些提示?看到了爱可生开源社区中杨老师的这篇文章《技术分享 | MySQL 编写脚本时避免烦人的警告》(版权归属:爱可生开源社区),提到了如何在Linux Shell下调用MySQL各种命令行工具时屏蔽掉烦人的告警信息输出,诸如下面这样,

root@ytt-ubuntu18:/home/ytt# mysql -uytt -proot -e "select version()"
mysql: [Warning] Using a password on the command line interface can be insecure.
+-----------+
| version() |
+-----------+
| 8.0.29    |
+-----------+

这样的告警信息对命令执行结果的输出非常不友好,那么我们如何屏蔽掉他?

下面罗列下几种能想到的方法,以供参考。

(1) 给用户空密码(不推荐)

给用户赋予空密码虽然可以屏蔽掉警告信息,但极不安全,类似于MySQL服务初始化时的--initialize-insecure选项。

root@ytt-ubuntu18:/home/ytt# mysql -u ytt_no_pass -e "select user()"
+-----------------------+
| user()                |
+-----------------------+
| ytt_no_pass@localhost |
+-----------------------+

(2) 配置文件不同块加入用户名密码(不推荐)

MySQL的配置文件有my.cnf、mysql.cnf、mysqld.cnf等,只要在这些配置文件里的不同块下添加对应的用户名和密码即可。

root@ytt-ubuntu18:/home/ytt# cat /etc/mysql/conf.d/mysql.cnf
[mysql]
prompt=mysql:\\d:\\v>
user=ytt
password=root
port=3340
[mysqldump]
user=ytt
password=root
port=3340
   
[mysqladmin]
user=ytt
password=root
port=3340

以上[mysql]块下的内容表示对mysql命令行生效,[mysqldump]块下的内容表示对mysqldump工具生效,[mysqladmin]块下的内容表示对mysqladmin工具生效。或者写简单点,统一加到[client]里,表示对所有客户端生效。注意只能把共享的部分内容加到这里。

root@ytt-ubuntu18:/home/ytt# cat /etc/mysql/conf.d/mysql.cnf
[mysql]
prompt=mysql:\\d:\\v>
[client]
user=ytt
password=root
port=3340

由于这些块都是针对客户端设置,不需要重启 MySQL 服务,可立即生效。

root@ytt-ubuntu18:/home/ytt# mysql -e "select user()"
+---------------+
| user()        |
+---------------+
| ytt@localhost |
+---------------+

(3) 设置MySQL环境变量(不推荐)

MySQL有一些内置环境变量,对所有客户端生效。

官方的环境变量列表如下,

https://dev.mysql.com/doc/refman/8.0/en/environment-variables.html

给当前用户设置所需的环境变量,之后再调用命令行工具即可。例如设置密码环境变量MYSQL_PWD 、传统TCP端口环境变量MYSQL_TCP_PORT等。

root@ytt-ubuntu18:/home/ytt# export MYSQL_PWD=root MYSQL_TCP_PORT=3340 
   
root@ytt-ubuntu18:/home/ytt# mysql -uytt -e "select user()"
+---------------+
| user()        |
+---------------+
| ytt@localhost |
+---------------+

此方法也不推荐使用,环境变量MYSQL_PWD容易被其他用户获取。例如直接用ps命令就可以轻易获取MYSQL_PWD的值。

用户1执行如下命令,

root@ytt-ubuntu18:/home/ytt# mysql -uytt -e "select sleep(1000)"

用户2执行ps aex就可以打印出环境变量MYSQL_PWD和MYSQL_TCP_PORT的值,

root@ytt-ubuntu18:/home/ytt# ps aex| grep MYSQL_PWD| grep -v 'grep'
7592 pts/0    S+     0:00 mysql -uytt -e select sleep(1000) LS_COLORS=rs=0:... MYSQL_PWD=root ...MYSQL_TCP_PORT=3340 ...

(4) 屏蔽标准错误输出内容,重定向到空设备文件(推荐)

root@ytt-ubuntu18:/home/ytt# mysql -uytt -proot -P3340 -e"select version()"  2>/dev/null
+-----------+
| version() |
+-----------+
| 8.0.29    |
+-----------+

这里利用Linux系统本身的特性来重定向MySQL错误信息,其中数字2代表错误输出的文件描述符,/dev/null代表空设备。

就是说将执行这条命令的错误信息重定向到空设备而不是标准输出,这样就可以变相的把警告信息屏蔽掉。

(5) 使用mysql_config_edit工具生成不同的login_path(推荐)

mysql_config_edit是MySQL 官方发布的一款工具,专门处理这类必须暴露用户密码的问题,可以进行一次设置,多次安全使用。

使用方法如下:设置一个login_path,名字为user_ytt ,密码按提示输入即可。

root@ytt-ubuntu18:/home/ytt# mysql_config_editor set -G user_ytt -S /var/run/mysqld/mysqld.sock -u ytt -p
Enter password:

接下来,调用任何MySQL命令行工具只需要带上--login-path选项即可使用。

root@ytt-ubuntu18:/home/ytt# mysql --login-path=user_ytt -e 'select user()'
+---------------+
| user()        |
+---------------+
| ytt@localhost |
+---------------+
   
root@ytt-ubuntu18:/home/ytt# mysqladmin  --login-path=user_ytt ping
mysqld is alive

mysql_config_editor工具也有一个缺点:同样的login_path不能分享给所有系统用户,其他用户得重新添加自己的login_path才能正常使用。

(6) 使用Unix socket插件(推荐,仅限本地)

auth_socket插件只根据本地OS登录用户名和本地linux socket文件来授权认证。

例如修改用户ytt@localhost插件为auth_socket,

mysql> alter user ytt@localhost identified with auth_socket ;
Query OK, 0 rows affected (0.00 sec)
   
mysql> \\q
Bye

切换到OS用户ytt,

root@ytt-pc-big:/home/ytt# su ytt
   
ytt@ytt-pc-big:~$ mysql -e "select user(),current_user()"
+---------------+----------------+
| user()        | current_user() |
+---------------+----------------+
| ytt@localhost | ytt@localhost  |
+---------------+----------------+
需要提醒一句:为了安全,操作MySQL的用户权限一定要做到按需分配。

小白学习MySQL

小白学习MySQL - 增量统计SQL的需求 - 开窗函数的方案

小白学习MySQL - 统计的"投机取巧"

小白学习MySQL - 增量统计SQL的需求

小白学习MySQL - 你碰到过这种无法登陆的场景?

小白学习MySQL - 不同版本创建用户的些许区别

小白学习MySQL - 随机插入测试数据的工具

小白学习MySQL - varchar类型字段为什么经常定义成255?

小白学习MySQL - 变通创建索引的案例一则

小白学习MySQL - “投机取巧”统计表的记录数

小白学习MySQL - 一次慢SQL的定位

小白学习MySQL - TIMESTAMP类型字段非空和默认值属性的影响

小白学习MySQL - 聊聊数据备份的重要性

小白学习MySQL - InnoDB支持optimize table?

小白学习MySQL - table_open_cache的作用

小白学习MySQL - 表空间碎片整理方法

小白学习MySQL - 大小写敏感问题解惑

小白学习MySQL - only_full_group_by的校验规则

小白学习MySQL - max_allowed_packet

小白学习MySQL - mysqldump保证数据一致性的参数差异

小白学习MySQL - 查询会锁表?

小白学习MySQL - 索引键长度限制的问题

小白学习MySQL - MySQL会不会受到“高水位”的影响?

小白学习MySQL - 数据库软件和初始化安装

小白学习MySQL - 闲聊聊

近期更新的文章:

国产数据库名录一览

小白学习MySQL - 统计的"投机取巧"

小白学习MySQL - 增量统计SQL的需求

腾讯会议号设计的几种猜测

充电宝的玄机

近期的热文:

"红警"游戏开源代码带给我们的震撼

文章分类和索引:

公众号1000篇文章分类和索引

以上是关于如何编写一个mysql数据库脚本的主要内容,如果未能解决你的问题,请参考以下文章

mysql数据库,如何在登录mysql之后执行操作系统上的SQL脚本?

如何导出数据库文件?

如何利用loadrunner做mysql压力测试

如何在 WordPress 插件安装中创建 MySql 用户自定义函数?

如何用shell脚本实现mysql数据库的操作

脚本中如何"优雅"避免MySQL登录提示信息