如何编写一个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 - varchar类型字段为什么经常定义成255?》
《小白学习MySQL - TIMESTAMP类型字段非空和默认值属性的影响》
《小白学习MySQL - InnoDB支持optimize table?》
《小白学习MySQL - table_open_cache的作用》
《小白学习MySQL - only_full_group_by的校验规则》
《小白学习MySQL - max_allowed_packet》
《小白学习MySQL - mysqldump保证数据一致性的参数差异》
《小白学习MySQL - MySQL会不会受到“高水位”的影响?》
近期更新的文章:
《充电宝的玄机》
近期的热文:
文章分类和索引:
以上是关于如何编写一个mysql数据库脚本的主要内容,如果未能解决你的问题,请参考以下文章
mysql数据库,如何在登录mysql之后执行操作系统上的SQL脚本?