zoukankan      html  css  js  c++  java
  • 当powershell遇上mysql引发的血案


     

    ------------------【故事来由】------------------


    起因:
    群友问:把
    cmd.exe /c a:mysql5.6inmysql.exe -uroot < a:xxxyyy.sql
    替换成
    powershell.exe /c a:mysql5.6inmysql.exe -uroot < a:xxxyyy.sql
    就不行了。

    经研究发现是由于powershell不支持【<】号导致的。

    解决方法:
    代替小于号的方法为,用source命令或用cmd。
    start-process -FilePath 'a:mysql5.6inmysql.exe' -ArgumentList ' -uroot -e "source a:xxxyyy.sql"'

    start-process -FilePath 'cmd.exe' -ArgumentList ' /c a:mysql5.6inmysql.exe -uroot < a:xxxyyy.sql'

    代替大于号的方法是,用-r。详见mysql手册。
    http://dev.mysql.com/doc/refman/5.7/en/mysqldump.html
    mysqldump.exe -uroot -B -r 库名 a:xxxyyy.sql
    --result-file=file_name, -r file_name


    ------------------【展开的讨论】------------------


    问:mysqldump是什么?
    答:
    导出数据库,生成sql源码文本。
    通过叫通 ip/端口/用户名/密码,来查询服务端口,得到字符串,处理字符串,然后写入文本。
    这里要说明的是,实际上是一次产生n行,写入内存缓存,(受my.ini中,[mysqldump]字段中,max_allowed_packet = xxM参数控制)然后追
    加入文件。并不是一行一追加。况且一行一追加,并没有意义。和二进制追加写入没区别。


    问:mysql.exe < xxx.sql是什么?
    答:
    载入文本并提交给服务器端口。
    命令行载入文本,都必须用【<】号了么?为什么Get-Content不用?

    问:win,linux命令行中,程序通用的参数的写法,应该是什么?
    答:
    命令名 -参数名 参数值
    命令名 --参数名 参数值

    命令名 /参数名 参数值


    powershell 传教士 原创文章 始作于 2016-02-19 允许转载,但必须保留名字和出处,否则追究法律责任

    问:powershell中【<】取消了么?
    答:


    问:假设powershell中【>】取消了,那我用什么?
    答:

    out-file -InputObject $要输出的内容 -FilePath 文件名
    https://technet.microsoft.com/en-us/library/hh849882.aspx

    或用
    Set-Content -Value $要输出的内容 -Path 文件名
    https://technet.microsoft.com/en-us/library/hh849828.aspx


    问:假设powershell中【>>】取消了,那我用什么?
    答:

    Add-Content -Value $要输出的内容 -Path 文件名
    https://technet.microsoft.com/en-us/library/hh849859.aspx

    注意:上述ps命令支持管道,支持单行,支持多行,支持换行和不换行。


    ------------------【其他数据库是如何做的?】------------------

    让我们先看看,其他数据库的做法。


    oracle:
    E:>exp system/oracle FILE=c.dmp FULL=Y

    sqlserver + sqlcmd:
    恢复
    sqlcmd -S ./sqlexpress -i c:/createdata.sql

    sqlserver + powershell:
    在SQL Server 2012 中,微软增加了4个新的备份和还原的cmdlet
    Backup-SqlDatabase
    Restore-SqlDatabase
    Backup-ASDatabase
    Restore-ASDatabase


    结论:
    这些数据库软件的,导出sql命令,导入sql命令,都没有用到【<】,【>】,【>>】这些符号。

    ------------------【引发的思考】------------------


    1 这应不应该算mysql客户端程序不合理的设计?bug?

    2 应不应该给mysqldump.exe 添加 --outfile 之类的参数来代替【>】?
    答:
    已经有了,是-r参数。

    3 应不应该给mysql.exe 添加 --runsqlfile 之类的参数来代替【<】?
    既然上面的可以不用大于号,为什么这个命令没有,不用小于号的参数?

    4 码农是干嘛的?

    程序员(码农)是虚拟世界的创世神,符合逻辑的要长处来,不符合逻辑的应砍掉。虚拟世界的规则是创世神规定的,
    虚拟世界中,路人甲砍路人乙一刀,乙是掉脑袋,还是额外长出个脑袋,应该被创世神来规定。样虚拟世界才能茁壮成长。
    当然不能胡乱规定,否则虚拟世界将坍塌。
    如何定义规则,是费脑筋的。否则要架构师干嘛?当然细节码农也要参与。


    如果你是一只猴子,我要抢走你【<】,【>】,【>>】牌香蕉,你会很不满意的大吼么?
    到底要不要夺走猴子的这只香蕉???


    ------------------【完】------------------

  • 相关阅读:
    ABAP 程序中的类 沧海
    ABAP类的方法(转载) 沧海
    More than 100 ABAP Interview Faq's(2) 沧海
    SAP and ABAP Memory总结 沧海
    ABAP Frequently Asked Question 沧海
    ABAP System Reports(Additional functions) 沧海
    ABAP Questions Commonly Asked 1 沧海
    ABAP Tips and Tricks 沧海
    ABAP System Fields 沧海
    ABAP 面试问题及答案(一):数据库更新及更改 SAP Standard (转) 沧海
  • 原文地址:https://www.cnblogs.com/piapia/p/5200638.html
Copyright © 2011-2022 走看看