Shell - one line query

前端 未结 6 1534
天命终不由人
天命终不由人 2021-02-07 02:01

I need to execute a mysql query in one line using bash.

It should be something like this:

mysql database --user=\'root\' --password=\'my-password\' <          


        
相关标签:
6条回答
  • 2021-02-07 02:09

    If you are running this on a production environment, it would be better to login to the mysql shell first so as not to expose your db details.

    Once logged into shell, why not just use a prepared.sql file?

    mysql -u user -p

    Next, enter your user password

    Now you are logged into shell and you can run commands securely from here:

    mysql> use DBNAME mysql> SOURCE file.sql

    This is how I operate on the command line with my databases in order for my passwords not to appear in the logs.

    0 讨论(0)
  • 2021-02-07 02:13

    Did you try

     mysql -u root -pmy_password -D DATABASENAME -e "UPDATE `database` SET `field1` = '1' WHERE `id` = 1111;" > output.txt 
    

    (the > output.txt part can be ignored but, it will be useful to see what was returned by the statement executed by looking at the file.)

    0 讨论(0)
  • 2021-02-07 02:14

    Use echo and a pipe:

    echo "UPDATE `database` SET `field1` = '1' WHERE `id` = 1111;" | mysql database --user='root' --password='my-password'
    
    0 讨论(0)
  • 2021-02-07 02:15

    Use the -e option:

    $ mysql -e "UPDATE ..."
    
    0 讨论(0)
  • 2021-02-07 02:18

    I normally prefer Triple less then as its syntax and approach is similar to file redirect. Easy to go back in history and modify query

    mysql database --user='root' --password='my-password' <<< "UPDATE `database` SET `field1` = '1' WHERE `id` = 1111"
    

    It is called Here Strings in bash. You can find more about them here http://linux.die.net/abs-guide/x15683.html

    It is useful when you want to pipe string to commands.

    0 讨论(0)
  • 2021-02-07 02:26

    Writing your password in a command is generally a bad idea (people can read it over your shoulder, it probably gets stored in your shell history, etc.), but you can put your credentials in a file. Giving the file a name starting with . makes it hidden, which is also more secure.

    # .db.conf
    [client]
    database=myDatabase
    user=myUserName
    password=myPassWord
    

    Make sure only you can read the file:

    chmod 600 .db.conf
    

    Then call MySQL like so:

    mysql --defaults-extra-file=.db.conf -e "UPDATE database SET field1 = '1' WHERE id = 1111;"
    

    or:

    echo "UPDATE database SET field1 = '1' WHERE id = 1111;" | mysql --defaults-extra-file=.db.conf
    

    Note that --defaults-extra-file needs to be the first option supplied to mysql otherwise it freaks out.

    0 讨论(0)
提交回复
热议问题